Как правильно изменить размер изображений PNG - PullRequest
2 голосов
/ 14 сентября 2011

Я использую следующую комбинацию функций

$img_r = imagecreatefrompng($src);
$dst_1 = imagecreate( $targ_w_1, $targ_h_1 );
imagecopyresampled($dst_1,$img_r,0,0,0,0,$targ_w_1,$targ_h_1,$size_test[0],$size_test[1]);
imagepng($dst_1, $final_source_1,9);

Конечный результат получается с очень низким качеством, так как я понимаю imagepng Максимальное качество равно 9. Вы не можете написать 100 там.Но все равно качество очень плохое.может я использую неправильные функции для манипулирования изображением?Любые предложения?

  1. оригинальное изображение 220x220 original 220x220 image

  2. изменение размера изображения до размера 120x120 resized image to size 120x120

  3. измененное изображение с тем же размером 220x220 resized image with the same size 220x220

решено

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Насколько я знаю, в PNG-формате и в базовой c-библиотеке нет такой вещи, как настройка качества.Существует сжатие, но, поскольку PNG - это формат без потерь, сжатие изображения не ухудшает качество.

Параметр сжатия 9 дает наилучшее сжатие (= наименьший размер файла).

Вероятно, проблема, с которой вы столкнулись, заключается в том, что ваше изображение назначения создано с imagecreate();палитра изображения.Вы, скорее всего, ищете imagecreatetruecolor()

2 голосов
/ 14 сентября 2011

Смотрите в руководстве .Он имеет это сказать о imagepng() $quality параметр:

Уровень сжатия: от 0 (без сжатия) до 9.

Так что 9, кажется,быть худшим уровнем качества.Попробуйте более низкую настройку.

1 голос
/ 14 сентября 2011

Проблема была с альфой.После того, как я прочитал комментарий Jaccos, я зашел в Google и нашел это

imagealphablending($dst_1, false);
imagesavealpha($dst_1,true);
$transparent = imagecolorallocatealpha($dst_1, 255, 255, 255, 127);
imagefilledrectangle($dst_1, 0, 0,$targ_w_1, $targ_h_1, $transparent);

Этот код должен быть вставлен сразу после imagecreatetruecolor ad, все будет просто отлично

...