我已阅读有关 Stack Overflow 的所有相关问题,其中包含词组: black-and-white 或< EM>单色。这些帖子讨论了两个常见问题之一:灰度或黑白。
我不只想在黑色中输出图像;但是,我想要更多。我希望我的输出图片在单色中,由变量给出,例如:$MyColor = #336699;
,$MyColor = #3366CC;
...
所以,我的问题不与任何现有问题重复。
首先,我有一张原始图片,这是一张真彩色图片。它以JPEG格式保存:
此原始图片包含: 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);
?>
以下是结果:
此灰度图片具有: 256 颜色。
现在,我想将其转换为真实 单色图片:
这张单色照片有: 1 颜色。
在这种情况下,$MyColor = #000000;
。
你能告诉我:如何使用PHP 将真彩色图像转换为单色图像?
答案 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);
结果: