如何在PHP中为透明PNG文件着色?

时间:2009-06-04 17:26:43

标签: php png transparency gd png-24

我有一个透明的PNG图像。透明区域需要保持完全透明,但其他区域需要使用特定的色调着色。

使用GD执行此操作的最佳方法是什么?

干杯,
詹姆斯

2 个答案:

答案 0 :(得分:7)

上述解决方案对我不起作用。

你在这里用红色填充alpha区域;我相信这不是目标。目标是为图像的其余部分着色并保持alpha不变。 (另外,错误使用函数imagecolorallocate,你应该使用imagecolorallocatealpha。)

我设法使用imagefilter并着色如下:

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

应用着色。

答案 1 :(得分:2)

GD库确实支持alpha透明度,所以这应该不是问题。这就是我把它放在一起的方法 - 你可能需要调整它,但它的要点应该在那里。

红色/绿色/蓝色为0-255。 Alpha为0-127(127为完全透明)。此代码应对图像“original.png”应用50%的红色调,并输出为“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");

?>