我想大致了解图片比例。 规格是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? 一个近似的指示对我来说足够了
答案 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));
这将允许指定
答案 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)