Проблема изменения размера изображения в PHP-gd создает уродливые измененные изображения
Я создаю эскизы фиксированной высоты и ширины из моего PHP-скрипта, используя следующую функцию
/*creates thumbnail of required dimensions*/
function createThumbnailofSize($sourcefilepath,$destdir,$reqwidth,$reqheight,$aspectratio=false)
{
/*
* $sourcefilepath = absolute source file path of jpeg
* $destdir = absolute path of destination directory of thumbnail ending with "/"
*/
$thumbWidth = $reqwidth; /*pixels*/
$filename = split("[/]",$sourcefilepath);
$filename = $filename[count($filename)-1];
$thumbnail_path = $destdir.$filename;
$image_file = $sourcefilepath;
$img = imagecreatefromjpeg($image_file);
$width = imagesx( $img );
$height = imagesy( $img );
// calculate thumbnail size
$new_width = $thumbWidth;
if($aspectratio==true)
{
$new_height = floor( $height * ( $thumbWidth / $width ) );
}
else
{
$new_height = $reqheight;
}
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
// save thumbnail into a file
$returnvalue = imagejpeg($tmp_img,$thumbnail_path);
imagedestroy($img);
return $returnvalue;
}
и я вызываю эту функцию со следующими параметрами
createThumbnailofSize($sourcefilepath,$destdir,48,48,false);
но проблема в том, что полученное изображение очень низкого качества, когда я выполняю ту же операцию с Adobe Photo shop, он выполняет хорошее преобразование.. почему это так? Я не могу найти параметр качества, с помощью которого я изменяю качество выходного изображения..
5 ответов
если это качество изображения вы после того, как вам нужно дать параметр качества при сохранении изображения с помощью imagejpeg ($tmp_img,$thumbnail_path, 100) / / значение по умолчанию 75
/*creates thumbnail of required dimensions*/
function
createThumbnailofSize($sourcefilepath,$destdir,$reqwidth,$reqheight,$aspectratio=false)
{
/*
* $sourcefilepath = absolute source file path of jpeg
* $destdir = absolute path of destination directory of thumbnail ending with "/"
*/
$thumbWidth = $reqwidth; /*pixels*/
$filename = split("[/\]",$sourcefilepath);
$filename = $filename[count($filename)-1];
$thumbnail_path = $destdir.$filename;
$image_file = $sourcefilepath;
$img = imagecreatefromjpeg($image_file);
$width = imagesx( $img );
$height = imagesy( $img );
// calculate thumbnail size
$new_width = $thumbWidth;
if($aspectratio==true)
{
$new_height = floor( $height * ( $thumbWidth / $width ) );
}
else
{
$new_height = $reqheight;
}
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
// save thumbnail into a file
$returnvalue = imagejpeg($tmp_img,$thumbnail_path,100);
imagedestroy($img);
return $returnvalue;
}
вы также можете рассмотреть возможность использования ImageMagick (http://us3.php.net/manual/en/book.imagick.php) вместо Gd. У меня была такая же проблема буквально пару дней назад с Java. Переход на ImageMagick вместо Java Advanced Images resultet в огромный разница в качестве.
вы также можете взглянуть на Image_Transform груша пакет. Он заботится о многих деталях низкого уровня для вас и делает создание и maniuplating изображений безболезненным. Он также позволяет использовать библиотеки GD или ImageMagick. Я с большим успехом использовал его в нескольких проектах.
пробовал использовать php.Thumbnailer ?
$thumb=new Thumbnailer("photo.jpg");
$thumb->thumbSquare(48)->save("thumb.jpg");
результат фото будет 48x48px. Легко право? :)