算长宽比的算法是什么?我需要输出如:4:3,16:9 [英] What's the algorithm to calculate aspect ratio? I need an output like: 4:3, 16:9

查看:215
本文介绍了算长宽比的算法是什么?我需要输出如:4:3,16:9的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我打算用javascript来裁剪图像以适应整个窗口。

I plan to use it with javascript to crop an image to fit the entire window.

编辑:我将使用仅接受第3部分的第3部分组件纵横比的格式如:4:3,16:9

I'll be using a 3rd part component that only accepts the aspect ratio in the format like: 4:3, 16:9

推荐答案

我认为你正在寻找可用的宽高比整数:整数解决方案如 16:9 而不是浮动:1 解决方案如 1.77778:1

I gather you're looking for an usable aspect ratio integer:integer solution like 16:9 rather than a float:1 solution like 1.77778:1.

如果是这样,你需要做的就是找到最大的共同点除数(GCD)并将其除以两个值。 GCD是均匀划分两个数字的最高数字。所以6和10的GCD是2,44和99的GCD是11。

If so, what you need to do is find the greatest common divisor (GCD) and divide both values by that. The GCD is the highest number that evenly divides both numbers. So the GCD for 6 and 10 is 2, the GCD for 44 and 99 is 11.

例如,1024x768监视器的GCD为256。值得你得到4x3或4:3。

For example, a 1024x768 monitor has a GCD of 256. When you divide both values by that you get 4x3 or 4:3.

A(递归)GCD算法:

A (recursive) GCD algorithm:

function gcd (a,b):
    if b == 0:
        return a
    return gcd (b, a mod b)

在C:

static int gcd (int a, int b) {
    return (b == 0) ? a : gcd (b, a%b);
}

int main(void) {
    printf ("gcd(1024,768) = %d\n",gcd(1024,768));
}

这里有一些完整的HTML / Javascript,它显示了一种检测屏幕尺寸的方法并从中计算纵横比。这适用于FF3,我不确定其他浏览器对 screen.width screen.height 的支持。 / p>

And here's some complete HTML/Javascript which shows one way to detect the screen size and calculate the aspect ratio from that. This works in FF3, I'm unsure what support other browsers have for screen.width and screen.height.

<html><body>
    <script type="text/javascript">
        function gcd (a, b) {
            return (b == 0) ? a : gcd (b, a%b);
        }
        var w = screen.width;
        var h = screen.height;
        var r = gcd (w, h);
        document.write ("<pre>");
        document.write ("Dimensions = ", w, " x ", h, "<br>");
        document.write ("Gcd        = ", r, "<br>");
        document.write ("Aspect     = ", w/r, ":", h/r);
        document.write ("</pre>");
    </script>
</body></html>

它输出(在我奇怪的宽屏显示器上):

It outputs (on my weird wide-screen monitor):

Dimensions = 1680 x 1050
Gcd        = 210
Aspect     = 8:5

我测试过的其他人:

Dimensions = 1280 x 1024
Gcd        = 256
Aspect     = 5:4

Dimensions = 1152 x 960
Gcd        = 192
Aspect     = 6:5

Dimensions = 1280 x 960
Gcd        = 320
Aspect     = 4:3

Dimensions = 1920 x 1080
Gcd        = 120
Aspect     = 16:9

我希望我在家里有最后一个,但是,不,这是一台工作机器不幸的是。

I wish I had that last one at home but, no, it's a work machine unfortunately.

如果您发现图形调整大小工具不支持宽高比,您所做的就是另一回事。我怀疑最好的选择是添加letter-boxing系列(就像你在观看宽屏电影时在旧电视的顶部和底部获得的那些)。我会将它们添加到顶部/底部或两侧(无论哪一个导致最少数量的字母装箱线),直到图像符合要求。

What you do if you find out the aspect ratio is not supported by your graphic resize tool is another matter. I suspect the best bet there would be to add letter-boxing lines (like the ones you get at the top and bottom of your old TV when you're watching a wide-screen movie on it). I'd add them at the top/bottom or the sides (whichever one results in the least number of letter-boxing lines) until the image meets the requirements.

一个你可能要考虑的事情是从16:9变为5:4的画面质量 - 我还记得我在电视拳击介绍之前在电视上看到的那些我曾经看过的高大瘦弱的牛仔。你可能最好每个纵横比有一个不同的图像,只需调整正确的尺寸,然后再将它发送到电线上。

One thing you may want to consider is the quality of a picture that's been changed from 16:9 to 5:4 - I still remember the incredibly tall, thin cowboys I used to watch in my youth on television before letter-boxing was introduced. You may be better off having one different image per aspect ratio and just resize the correct one for the actual screen dimensions before sending it down the wire.

这篇关于算长宽比的算法是什么?我需要输出如:4:3,16:9的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆