Как я уже упоминал в этом вопросе , я использовал функцию imageetinterpolation, чтобы попробовать различные алгоритмы изменения размера («билинейный», «бикубический», «ближайший сосед» и т. Д.):
$fn = 'sourceimage.jpg'; // 800x600 px image $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; } } $arr = array(IMG_BICUBIC, IMG_BICUBIC_FIXED, IMG_BILINEAR_FIXED, IMG_CATMULLROM, IMG_NEAREST_NEIGHBOUR, IMG_MITCHELL, IMG_GAUSSIAN); for ($i = 0; $i <= 6; $i++) { $src = imagecreatefromstring(file_get_contents($fn)); $dst = imagecreatetruecolor($width, $height); imagesetinterpolation($dst, $arr[$i]); // i tried this one only imagesetinterpolation($src, $arr[$i]); // or that one only, or both, but it's always identical imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); imagedestroy($src); imagejpeg($dst, $i . '.jpg'); imagedestroy($dst); }
К сожалению, все выходные файлы (0.jpg, 1.jpg, …, 5.jpg) идентичны (я проверил, выполнив md5sum *.jpg
: все суммы MD5 идентичны).
Как правильно использовать imagesetinterpolation
при изменении размера изображения?