Прозрачность PNG с PHP
Эй, имея некоторые проблемы с попыткой сохранить прозрачность в 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);
Ответы
Ответ 1
У меня был успех, делающий это так в прошлом:
$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()
Ответ 2
Забудьте о индексе прозрачности цвета, он никогда не работает во всех продуктах рендеринга. Вместо этого используйте маску альфа-слоя:
$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);
Ответ 3
imagecopyresized не поддерживает прозрачность.
imagecopymerge, но он не изменяется.
Решение? Вероятно, вы, возможно, вручную измените размер.
Ответ 4
Эти функции получают доступ к базовой библиотеке gdlib, которая является прекрасной игрушкой, но не к чему-то, что делает хорошие результаты. Если у вас есть опция, используйте imagemagick. Недостатком является то, что в настоящее время нет хороших php-привязок, поэтому вам нужно получить к нему доступ через оболочку, которую обычно не разрешают на общих хостах.
Ответ 5
См. dycey ответ на вопрос "Как изменить размер..." . По существу, перед выполнением каких-либо других операций вам необходимо заполнить весь фон прозрачностью.