我计划将其与JavaScript配合使用以裁剪图像以适合整个窗口。
编辑 :我将使用仅接受如下格式的长宽比的第三方组件:4:3,16:9。
4:3
16:9
我发现您正在寻找integer:integer像这样的可用长宽比解决方案,16:9而不是float:1像这样的解决方案1.77778:1。
integer:integer
float:1
1.77778:1
如果是这样,您需要做的就是找到最大公约数(GCD)并将其除以两个值。GCD是将两个数字均分的最高数字。因此6和10的GCD为2,44和99的GCD为11。
例如,一个1024x768监视器的GCD为256。将这两个值除以该值将得到4x3或4:3。
(递归)GCD算法:
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。
screen.width
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>
它输出(在我怪异的宽屏显示器上):
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
我希望我能在家里有最后一个,但不幸的是,这是一台工作机器。
如果发现图形调整大小工具不支持长宽比,该怎么办。我怀疑最好的选择是添加字母装订线(就像您在旧电视上观看宽屏电影时在顶部和底部看到的那样)。我将它们添加到顶部/底部或侧面(无论哪一个导致最少的装箱线数量),直到图像满足要求为止。
您可能要考虑的一件事是,图像的质量已从16:9更改为5:4-我仍然记得在介绍信箱技术之前,我在电视上看过的那年高个子,瘦小的牛仔。您最好在每高宽比上拥有一张不同的图像,而只是将实际尺寸调整为适合实际屏幕尺寸的尺寸,然后再将其发送出去。