我有一个定义的固定宽度和高度来调整图像大小 . 但是,我有这个问题,因为图像可以有任何类型的大小比例(它可以是 vertical 或 horizontal ) . 在这种情况下,固定的宽度和高度会引起问题 . 我想以更聪明的方式计算 width and height .
例如,假设我已经定义了 width 1024px and height 768px . 我想调整一个垂直的图像 (height 1100px and width 200px) . 所以在我的情况下它将调整为固定 size (1024x768) ,因此宽度将从 100px to 768px 增加,并且它将非常难看 . 同样,如果图像的高度小于 768px ,则会强制将高度增加到 768px .
因此,我想根据原始图像大小比率计算新的图像大小 . 让我们说如果上面的示例图像应该调整到 768px 的最大高度,但那么宽度呢?它已经小于我的"maximum width",这是 200px ,所以宽度应保持不变吗?还是应该进一步减少?
同样,如果图像有 the height 200px, and the width 1100px . 所以宽度应该是 decreased to 1024px ,但高度怎么样?
第三个问题是,让's suppose if both height and width are more than the maximum height and maximum width, let' s说 width: 1100px and height:4000px . 现在,由于宽度和高度都超过最大宽度和最大高度,但图像是垂直的,它将使其成为水平 . 那么如何在这种情况下检查是否应根据最大高度或根据最大宽度调整图像大小?
我很感激任何帮助 .
12 回答
这是有效的 .
检查下面的PHP代码:
您应该根据哪个属性远离最大值来调整大小 . 然后,计算比率 .
这是我个人抓取图像大小调整代码的代码 . 首先,您需要的数据:
然后,此算法尽可能地将图像拟合到目标大小,保持原始宽高比,而不是将图像拉伸大于原始图像:
这会使图像完全填满目标尺寸,而不是拉伸它:
而这实际上是调整大小:
在这种情况下,
$size
只是宽度和高度的一个数字(方形目标大小) . 我相信你可以修改它以使用非方形目标 . 它还应该为您提供可以使用的其他调整大小算法的灵感 .如果你想改变高度:
如果要更改宽度:
你想要的是保持原始图像的纵横比 . 这是图像的宽度和高度之间的比率 . 因此,您需要计算在垂直和水平方向上调整图像大小的因子,然后保持两者中的较高者 . 在伪代码中:
我达成了这个问题并没有找到合适的答案,所以我自己开始回答这个问题 .
我从一些基本的逻辑开始,在咨询了我的朋友,他在数学方面做得更好,这就是我们想出来的 .
这段代码是可重用的,所以要把自己搞定 . 只需传递允许的最大最小尺寸,它就会计算出最大边的尺寸,这样你就可以得到一个正确缩放的尺寸,然后你可以在其中居中裁剪,从而产生正确缩小和裁剪的图像方形图像 . 这对于 Profiles 图片和缩略图等内容非常有用 .
感谢我的朋友,Justin Gillett,因为他对交叉乘法的精彩建议 .
此示例将缩小图像以适合定义的像素完美纵横比(16:9),从而创建不大于指定限制(1200 x 675)的图像 .
设置图像比例和任何上限:
计算新图像的宽度和高度
调整图像大小
循环通过因子,直到两个维度都小于原始图像大小
如果给出或不给出最大高度或宽度,使用@(jilles de wit)逻辑
considerations : these should already be defined!
代码
resampling
/ 函数调用 /
你需要的是'maintain'的宽高比 . 最初你有一个大小(wxh)
500x1000
的图像,这个宽高比是0.5
. 假设您正在将1000
更改为768
高度,则结果宽度将为0.5 * 768 = 384
.另一个例子,
1800 x 1200
和你的新高度是200
,那么你的新宽度是300
因为300/200
是1.5
而1800/1200
也是1.5
.祝好运 .
这个怎么样: