计算JavaScript中的图片比例。结果可以接近规格

时间:2019-06-20 11:39:40

标签: javascript image aspect-ratio

我想大致了解图片比例。 规格是16/9和3/1;

我要检查的示例图像的尺寸为1281x720px;

要计算比率,请使用以下代码:

const gcd = (a, b) => b ? gcd(b, a % b): a;

const aspectRatio = (width, height)  => {
    const divisor = gcd(width, height);
    return `${width / divisor}:${height / divisor}`;
};

此代码可以正常工作。

那么,是否有可能检查图像是否接近16/9或3/1? 一个近似的指示对我来说足够了

2 个答案:

答案 0 :(得分:0)

也许是这样吗?

const aspectRatio = (width, height)  => {
    const ratio = (width/height)-(16/9) < 0.1
                  ? '16:9'
                  : ((width/height)-(3/1) < 0.1 ? '3:1' : 'out of spec');

    return `${ratio}`;
};

console.log(aspectRatio(1281, 720));
console.log(aspectRatio(606, 202));
console.log(aspectRatio(320, 100));

请注意,我现在选择的“公差”在10%时是任意的,图像尺寸越大,它变得越不准确(因为10%将是较大的像素偏差范围),因此您可能需要考虑将其降低到您喜欢...上面的代码绝对不是优雅的=),但是对于您的特定情况,它应该可以工作。

一个更“优雅”,更灵活的解决方案将是您的函数的稍微扩展的版本,如下所示:

const aspectRatio = (width, height, tolerance = 0.1, specs = ['16:9', '3:1'])  => {
    return specs.filter((spec) => {
        if ( Math.abs((width/height)-eval(spec.replace(':', '/'))) <= tolerance ) {
            return spec;
        }
    })[0] || false;
};

console.log(aspectRatio(1281, 720));
console.log(aspectRatio(606, 202));
console.log(aspectRatio(320, 100));

这将允许指定

  • a)图像尺寸可以偏离“性能比”的公差水平
  • b)允许的图像比例规范

答案 1 :(得分:0)

这是正确的比率,因此您可以检查您的宽度/高度是接近16/9还是3/1:

const width = 1281
const height = 720

const distanceFrom16by9 = Math.abs(1281/720 - 16/9)
const distanceFrom3by1 = Math.abs(1281/720 - 3)

const ratio = distanceFrom16by9 < distanceFrom3by1 ? "16:9" : "3:1"

console.log(ratio)