Как я могу тонировать прозрачные файлы PNG в PHP?
У меня есть прозрачное изображение PNG. Прозрачные области должны оставаться полностью прозрачными, но другие области должны окрашиваться с определенным оттенком.
Какой лучший способ сделать это с помощью GD?
Ура,
Джеймс
2 ответа
Вышеупомянутое решение не работает для меня.
Вы заполняете альфа-область красным цветом; что я считаю, не цель. Цель состоит в том, чтобы подкрасить остальную часть изображения и оставить альфа неизменной. (Также, неправильное использование функции imagecolorallocate, вы должны использовать imagecolorallocatealpha.)
Мне удалось использовать imagefilter и раскрасить следующим образом:
imagefilter($ image, IMG_FILTER_COLORIZE, 0, 255, 0, 30);
применять тонировку.
Библиотека 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");
?>