如何转换"真彩色"图像为"单色"图像,用PHP?

时间:2016-07-22 05:48:29

标签: php image colors gd

  

我已阅读有关 Stack Overflow 的所有相关问题,其中包含词组 black-and-white 或< EM>单色。这些帖子讨论了两个常见问题之一:灰度黑白

只想在黑色中输出图像;但是,我想要更多。我希望我的输出图片在单色中,由变量给出,例如:$MyColor = #336699;$MyColor = #3366CC; ...

所以,我的问题与任何现有问题重复。

首先,我有一张原始图片,这是一张真彩色图片。它以JPEG格式保存:

*#1*. The original image.

此原始图片包含: 16 777 216 颜色。

然后,我可以在运行这个简单的脚本后将其转换为灰度图像:

<?php 

$source_file = "1.JPG";

$im = ImageCreateFromJpeg($source_file); 

$imgw = imagesx($im);
$imgh = imagesy($im);

for ($i=0; $i<$imgw; $i++)
{
        for ($j=0; $j<$imgh; $j++)
        {

                // Get the RGB value for current pixel

                $rgb = ImageColorAt($im, $i, $j); 

                // Extract each value for: R, G, B

                $rr = ($rgb >> 16) & 0xFF;
                $gg = ($rgb >> 8) & 0xFF;
                $bb = $rgb & 0xFF;

                // Get the value from the RGB value

                $g = round(($rr + $gg + $bb) / 3);

                // Gray-scale values have: R=G=B=G

                $val = imagecolorallocate($im, $g, $g, $g);

                // Set the gray value

                imagesetpixel ($im, $i, $j, $val);
        }
}

header('Content-type: image/jpeg');
imagejpeg($im);

?>

以下是结果:

*#2*. The gray-scale image.

此灰度图片具有: 256 颜色。

现在,我想将其转换为真实 单色图片:

*#3*. The one-color image.

这张单色照片有: 1 颜色。

在这种情况下,$MyColor = #000000;

你能告诉我:如何使用PHP 将真彩色图像转换为单色图像?

1 个答案:

答案 0 :(得分:1)

只需两行代码即可处理灰度转换并将图像缩小为仅 两种颜色 (因为单色图像是空白画布),抖动:

$img = imagecreatefromjpeg('./38519049.jpg');

imagefilter($img, IMG_FILTER_GRAYSCALE); // convert to grey scale.
imagetruecolortopalette($img, true, 2); // 'true' for dithering, '2' for number of colours.

header('Content-type: image/jpeg');
imagejpeg($img);

结果:

enter image description here