产生的图像颜色并不完全是我通过的颜色

时间:2011-10-13 06:37:51

标签: php gd

我有一个彩色图像,我想用GD库改变颜色。图像是PNG,我也希望保持透明度。我编写了以下代码来保持透明度并改变颜色,但结果颜色不是我在imagefilter函数中使用的颜色。 例如,如果我传递0,0,255,那么结果图像颜色将是194,194,255。

请帮我解决这个问题。这是我的代码。

<?php
// first we will create a transparent image. an image that has no color.
$width = 294; $height=333;
$image = imagecreatetruecolor($width,$height); //black image of the specified width x height. 

imagealphablending($image, false);  // set blend mode to false.

$col=imagecolorallocatealpha($image,255,255,255,127); // fill color

imagefilledrectangle($image,0,0,$width,$height,$col); 

imagealphablending($image,true);


$shirt = imagecreatefrompng("primary_shirts/shirt.png");
imagesavealpha($shirt, true);
imagefilter($shirt, IMG_FILTER_GRAYSCALE);
imagefilter($shirt, IMG_FILTER_COLORIZE, 0,0,255);

imagecopy($image, $shirt, 0, 0, 0, 0, $width, $height);

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

if(imagepng($image, "primary_shirts/hello.png", 1)){
    echo "http://localhost/site/primary_shirts/hello.png";
}

imagedestroy($image);
imagedestroy($shirt);
?>

编辑:我试图将图像着色为蓝色(0,0,255)。此脚本为图像着色,但生成的图像不是(0,0,255)而是(76,76,255)。为什么这样?

2 个答案:

答案 0 :(得分:0)

if(imagepng($image, "primary_shirts/hello.png", 1)){

应该是

if(imagepng($image, "primary_shirts/shirt.png", 1)){

你的header("Content-type: image/png");在哪里?

我不知道hello.png和shirt.png的内容是什么。但试着坚持simplest example(除非你要提供更多信息)

答案 1 :(得分:0)

$red = 0; $green = 204; $blue = 204;
$shirt = "primary_shirts/shirt.png";
$im = imagecreatefrompng ($shirt);
imagesavealpha($im, true);
imagefilter($im,IMG_FILTER_GRAYSCALE);
if($im && imagefilter($im,IMG_FILTER_COLORIZE, $red-195, $green-195, $blue-195  ) )
{
    imagepng($im, 'primary_shirts/hello.png');
    echo "http://localhost/site/primary_shirts/hello.png";
}

似乎IMG_FILTER_COLORIZE并没有真正做到php.net所说的。它实际上从您传递的图像中减去图像颜色。上面的代码正是我到目前为止所做的事情。