函数 imagecopyresampled 用于生成缩略图或调整图像大小,同时保持纵横比:
$fn = $_FILES['data']['tmp_name'];
$size = getimagesize($fn);
$width = $size[0];
$height = $size[1];
$ratio = $width / $height;
if ($ratio > 1 && $size[0] > 500) { $width = 500; $height = 500 / $ratio; }
else { if ($ratio <= 1 && $size[1] > 500) { $width = 500 * $ratio; $height = 500; }}
$src = imagecreatefromstring(file_get_contents($fn));
$dst = imagecreatetruecolor($width, $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
imagedestroy($src);
imagejpeg($dst, 'test.jpg');
imagedestroy($dst);
我该如何选择PHP使用的调整大小算法?
注意:如此问题所述,设置
imagesetinterpolation($dst, IMG_BILINEAR_FIXED);
等内容似乎无效。
根据我进行的测试(使用另一种语言),"双线性调整大小"有时比双三次更好,有时则相反(取决于是缩小还是放大)。
![](https://istack.dev59.com/x8Yoj.webp)
imagesetinterpolation($dst, IMG_BILINEAR_FIXED);
之类的东西似乎不起作用。 - Basj