Результирующий цвет изображения не совсем то, что я прошел - PullRequest
0 голосов
/ 13 октября 2011

У меня одноцветное изображение, и я хочу изменить этот цвет с помощью библиотеки 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 голосов
/ 13 октября 2011
$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.Это фактически вычитает цвет изображения из того, что вы передаете.Выше код точно делает то, что я хочу, чтобы он делал до сих пор.

0 голосов
/ 13 октября 2011
if(imagepng($image, "primary_shirts/hello.png", 1)){

должно быть

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

?

А где ваш header("Content-type: image/png");?

Я не знаю, что содержимое hello.png нирубашка.Но попробуйте придерживаться простейшего примера (если вы не собираетесь предоставлять дополнительную информацию)

...