使用PHP GD更改图像的色调(透明PNG)

时间:2013-02-19 18:52:33

标签: php image-processing gd hue

我在this问题上提到了答案。 我目前正在使用以下代码进行色调叠加:

function imagehue(&$image, $angle) {
if($angle % 360 == 0) return;
$width = imagesx($image);
$height = imagesy($image);

for($x = 0; $x < $width; $x++) {
    for($y = 0; $y < $height; $y++) {
        $rgb = imagecolorat($image, $x, $y);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;            
        $alpha = ($rgb & 0x7F000000) >> 24;
        list($h, $s, $l) = rgb2hsl($r, $g, $b);
        $h += $angle / 360;
        if($h > 1) $h--;
        list($r, $g, $b) = hsl2rgb($h, $s, $l);            
        imagesetpixel($image, $x, $y, imagecolorallocatealpha($image, $r, $g, $b, $alpha));
    }
  }
}

它适用于JPG。但是此代码不适用于透明的PNG图像。 这就是我为PNG图像调用此函数的方法:

header('Content-type: image/png');
**$image = imagecreatefrompng('image.png');**
imagehue($image, 180);
imagejpeg($image);

有谁知道我应该做出哪些改变?

1 个答案:

答案 0 :(得分:2)

这是因为您使用imagejpeg功能,而是使用imagepng。 如果您还希望它与Alpha透明度一起使用,请将其添加到您的代码中:

imagealphablending($image, false);
imagesavealpha($image, true);