#php #gd
Вопрос:
Я стараюсь использовать простой скрипт изменения размера/обрезки для создания миниатюр.
$imageObject = imagecreatefromstring(file_get_contents($path.$image)); $originalWidth = imagesx($imageObject); $originalHeight = imagesy($imageObject); $originalAspect = $originalWidth/$originalHeight; $thumbAspect = $thumbWidth/$thumbHeight; $newWidth = 0; $newHeight = 0; if($originalAspect gt;= $thumbAspect) { $newHeight = $thumbHeight; $newWidth = $originalWidth/($originalHeight/$thumbHeight); } else { $newWidth = $thumbWidth; $newHeight = $originalHeight/($originalWidth/$thumbWidth); } $thumb = imagecreatetruecolor($thumbWidth,$thumbHeight); $dstX = 0-($newWidth-$thumbWidth)/2; $dstY = 0-($newHeight-$thumbHeight)/2; if($ext=='.png') { imagealphablending($thumb, false); imagesavealpha($thumb, true); $transparentColor = imagecolorallocatealpha($thumb, 0, 0, 0, 127); imagefill($thumb, 0, 0, $transparentColor); } $crop = imagecopyresampled($thumb,$imageObject,$dstX,$dstY,0,0,$newWidth,$newHeight,$originalWidth,$originalHeight); switch ($ext) { case '.jpg': $save = imagejpeg($thumb, $cacheFile, 100); break; case '.png': $save = imagepng($thumb, $cacheFile, 2); break; case '.gif': $save = imagegif($thumb, $cacheFile, 90); break; case '.webp': $save = imagewebp($thumb, $cacheFile, 90); break; } $destroy = imagedestroy($thumb);
Когда этот скрипт преобразует форматы png или webp, никаких проблем. Но если он преобразует форматы jpeg (особенно небольшие изображения, такие как 400×800), качество получаемых изображений очень низкое, даже если я установил параметр качества в imagejpeg как 100. Я делаю что-то не так или функция GD работает таким образом?