Как я могу подкрашивать прозрачные файлы PNG в PHP? - PullRequest
3 голосов
/ 04 июня 2009

У меня есть прозрачное изображение PNG. Прозрачные области должны оставаться полностью прозрачными, но другие области должны окрашиваться с определенным оттенком.

Какой лучший способ сделать это с помощью GD?

Приветствия
Джеймс

Ответы [ 2 ]

7 голосов
/ 17 августа 2009

Приведенное выше решение не сработало для меня.

Вы заполняете альфа-область красным; что я верю не цель. Цель состоит в том, чтобы подкрасить остальную часть изображения и оставить альфа неизменной. (Также при неправильном использовании функции imagecolorallocate необходимо использовать imagecolorallocatealpha.)

Мне удалось использовать imagefilter и раскрасить следующим образом:

imagefilter ($ image, IMG_FILTER_COLORIZE, 0, 255, 0, 30);

для применения тонировки.

2 голосов
/ 04 июня 2009

Библиотека GD поддерживает альфа-прозрачность, поэтому это не должно быть проблемой. Вот как я бы это сложил - вам, возможно, понадобится настроить это, но суть должна быть в этом.

Красный / зеленый / синий - 0-255. Альфа 0-127 (127 полностью прозрачный). Этот код должен применять 50% красный оттенок к изображению «original.png» и выводить как «output.png».

<?php

$red = 255;
$green = 0;
$blue = 0;
$alpha = 63

$src_img = imagecreatefrompng("original.png");
$tint_img = imagecreatetruecolor(imagesx($im_src), imagesy($im_src));
$tintcolor = imagecolorallocate($tint_img, $red, $green, $blue, $alpha);
imagefill($tint_img, 0, 0, $tintcolor);
imagecopymerge($tint_img, $src_img, 0, 0, 0, 0, imagesx($im_src), imagesy($img_src), 100);
imagepng("output.png");

?>
...