0

我想了解 PHP 中的图像处理并编写一些代码来编辑照片。

所以,我正在阅读有关 imagefilter() 函数的信息,但我想手动编辑颜色。

我有一小段带有 imagefilter 的代码来做图像棕褐色

imagefilter($image, IMG_FILTER_GRAYSCALE); 
imagefilter($image, IMG_FILTER_COLORIZE, 55, 25, -10);
imagefilter($image, IMG_FILTER_CONTRAST, -10); 

我想做同样的事情,但没有 imagefilter(); 有可能的?

我知道它可能会获取图像中的颜色,然后更改它们并重新绘制它;

要获得图像颜色,我有这个:

$rgb = imagecolorat($out, 10, 15);
$colors = imagecolorsforindex($out, $rgb);

这打印:

array(4) { 
  ["red"]=> int(150) 
  ["green"]=> int(100) 
  ["blue"]=> int(15) 
  ["alpha"]=> int(0) 

}

因为我可以编辑那些值并将它们整合到图片中?

我将不胜感激任何形式的帮助:书籍、教程、代码片段。

4

1 回答 1

3

使用imagesetpixel()函数。由于此函数需要一个颜色标识符作为第三个参数,因此您需要使用imagecolorallocate()创建一个。

这是一个示例代码,它将每种颜色的颜色值减半:

$rgb = imagecolorat($out, 10, 15);
$colors = imagecolorsforindex($out, $rgb);

$new_color = imagecolorallocate($out, $colors['red'] / 2, $colors['green'] / 2, $colors['blue'] / 2);
imagesetpixel($out, 10, 15, $new_color);

现在这里有一个简单的灰度过滤器:

list($width, $height) = getimagesize($filename);
$image = imagecreatefrompng($filename);
$out = imagecreatetruecolor($width, $height);

for($y = 0; $y < $height; $y++) {
    for($x = 0; $x < $width; $x++) {
        list($red, $green, $blue) = array_values(imagecolorsforindex($image, imagecolorat($image, $x, $y)));

        $greyscale = $red + $green + $blue;
        $greyscale /= 3;

        $new_color = imagecolorallocate($out, $greyscale, $greyscale, $greyscale);
        imagesetpixel($out, $x, $y, $new_color);
    }
}

imagedestroy($image); 
header('Content-Type: image/png');
imagepng($out);
imagedestroy($out);

在循环内使用时要小心imagecolorallocate,您不能分配比imagecolorstotal在单个图像内返回更多的颜色。如果达到限制imagecolorallocate将返回 false,您可以使用imagecolorclosest获取已分配的壁橱颜色。

于 2013-03-21T07:34:58.033 回答