Эй, имея некоторые проблемы, пытаясь сохранить прозрачность на png, когда я создаю эскиз из него, кто-нибудь имеет опыт с этим? любая помощь будет большой, вот что я сейчас делаю:
$fileName= "../js/ajaxupload/tees/".$fileName; list($width, $height) = getimagesize($fileName); $newwidth = 257; $newheight = 197; $thumb = imagecreatetruecolor($newwidth, $newheight); imagealphablending($thumb, true); $source = imagecreatefrompng($fileName); imagealphablending($source, true); imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); imagesavealpha($thumb, true); imagepng($thumb,$newFilename);
У меня был успех, делающий это так в прошлом:
$thumb = imagecreatetruecolor($newwidth, $newheight); imagealphablending($thumb, false); imagesavealpha($thumb, true); $source = imagecreatefrompng($fileName); imagealphablending($source, true); imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); imagepng($thumb,$newFilename);
Я нашел качество выходного изображения намного лучше, используя imagecopyresampled()
чем imagecopyresized()
Забудьте индекс прозрачности цвета, он никогда не работает во всех продуктах рендеринга. Вместо этого используйте маску альфа-слоя:
$image = imagecreatetruecolor($size, $size); imagealphablending($image, false); imagesavealpha($image, true); $trans_layer_overlay = imagecolorallocatealpha($image, 220, 220, 220, 127); imagefill($image, 0, 0, $trans_layer_overlay);
imagecopyresized не поддерживает прозрачность должным образом.
imagecopymerge делает, но не изменяет размер.
Решение? Вероятно, вы в конечном итоге измените размер вручную.
Эти функции получают доступ к базовой библиотеке gdlib, которая является прекрасной игрушкой, но не к чему-то, что делает хорошие результаты. Если у вас есть этот параметр, используйте вместо него imagemagick . Недостатком является то, что в настоящее время нет хороших php-привязок, поэтому вам нужно получить к нему доступ через оболочку, которую обычно не разрешают на общих хостах.
См . Ответ dycey на «Как изменить размер …» . По существу, перед выполнением любых других операций необходимо заполнить весь фон прозрачностью.