gpt4 book ai didi

php - 使用 PHP 缩放图像并保持纵横比

转载 作者:IT王子 更新时间:2023-10-29 00:18:53 29 4
gpt4 key购买 nike

基本上我想上传一张图片(我已经排序)并将其缩小到某些限制条件,例如最大宽度和高度,但保持原始图片的纵横比。

我没有在服务器上安装 Imagick - 否则这很容易。

一如既往地感谢您的帮助。谢谢。

编辑:我不需要整个代码或任何东西,只要朝正确的方向插入就太棒了。

最佳答案

实际上接受的解决方案不是正确的解决方案。原因很简单:有时源图像的比例和目标图像的比例会不同。任何计算都应反射(reflect)这种差异。

请注意 PHP.net 网站上给出的示例中的相关行:

$ratio_orig = $width_orig/$height_orig;

if ($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}

完整的例子可以在这里找到: http://php.net/manual/en/function.imagecopyresampled.php

在 stackoverflow 上还有其他答案(带有示例)对遇到相同问题的类似问题(以不同方式提出的相同问题)。

例子:

假设我们有一张 1630 x 2400 像素的图像,我们希望自动调整其大小以将纵横比保持为 160 x 240。让我们采用可接受的解决方案进行一些数学计算:

if($old_x < $old_y) 
{
$thumb_w = $old_x*($new_width/$old_y);
$thumb_h = $new_height;
}

高度 = 240宽度 = 1630 * ( 160/2400 ) = 1630 * 0.0666666666666667 = 108.6666666666667108.6 x 240 这不是正确的解决方案。

提出的下一个解决方案如下:

if($old_x < $old_y)
{
$thumb_w = $old_x/$old_y*$newHeight;
$thumb_h = $newHeight;
}

高度 = 240;宽度 = 1630/2400 * 240 = 163它更好(因为它保持纵横比),但它超过了可接受的最大宽度。

都失败了。

我们根据 PHP.net 提出的解决方案进行数学计算:宽度 = 160高度 = 160/(1630/2400) = 160/0.6791666666666667 = 235.5828220858896(else 子句)。 160 x 236(四舍五入)是正确答案。

关于php - 使用 PHP 缩放图像并保持纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1373426/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com