如何在PHP中将图像转换为黑白?
不只是将其变成灰度,而是每个像素变成黑色或白色?
答案 0 :(得分:20)
使用php gd库:
imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_CONTRAST, -100);
查看上面链接中的用户评论以获取更多示例。
答案 1 :(得分:10)
只需将灰度颜色变为黑色或白色。
float gray = (r + g + b) / 3
if(gray > 0x7F) return 0xFF;
return 0x00;
答案 2 :(得分:6)
假设您的主机支持它,您可以使用imagemagick。您想用什么函数来判断像素应该是黑色还是白色?
答案 3 :(得分:2)
如果您打算自己这样做,则需要实施dithering algorithm。但正如@jonni所说,使用现有工具会容易得多吗?
答案 4 :(得分:1)
$rgb = imagecolorat($original, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8 ) & 0xFF;
$b = $rgb & 0xFF;
$gray = $r + $g + $b/3;
if ($gray >0xFF) {$grey = 0xFFFFFF;}
else { $grey=0x000000;}
答案 5 :(得分:1)
这个功能就像一个魅力
public function ImageToBlackAndWhite($im) {
for ($x = imagesx($im); $x--;) {
for ($y = imagesy($im); $y--;) {
$rgb = imagecolorat($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8 ) & 0xFF;
$b = $rgb & 0xFF;
$gray = ($r + $g + $b) / 3;
if ($gray < 0xFF) {
imagesetpixel($im, $x, $y, 0xFFFFFF);
}else
imagesetpixel($im, $x, $y, 0x000000);
}
}
imagefilter($im, IMG_FILTER_NEGATE);
}
答案 6 :(得分:0)
对于每个像素,您必须从颜色转换为灰度 - 类似于 $ gray = $ red * 0.299 + $ green * 0.587 + $ blue * 0.114; (这些是NTSC加权因子;存在其他类似的权重。这模仿了眼睛对不同颜色的不同反应性。)
然后你需要决定截止值 - 通常是最大像素值的一半,但根据图像你可能更喜欢更高的值(使图像更暗)或更低(使图像更亮)。
只是将每个像素与截止值进行比较会丢失很多细节 - 即大的黑暗区域会变成黑色 - 因此为了保留更多信息,您可以抖动。基本上,从图像的左上角开始:对于每个像素,在与截止值比较之前,为左侧和上方的像素添加误差(原始值和最终赋值之间的差值)。
请注意,在PHP中执行此操作会非常慢 - 您可以更进一步找到提供此功能的库。