首先,我有一张原始图片,这是一张真彩色图片。它以JPEG格式保存:
此原始图片保存在: 24位图像。
然后,我可以在运行这个简单的脚本后将其转换为灰度图像:
<?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);
?>
以下是结果:
此灰度图片保存在: 8位图像。
现在,我想将其转换为真实 黑白图像:
此黑白照片保存在: 1位图像。
你能告诉我:如何使用PHP 将真彩色图像转换为黑白图像?
答案 0 :(得分:5)
朋友将代码中的灰度颜色变为黑色或白色。 (根据您的要求改变或改变($ g> 0x7F))
$g = (r + g + b) / 3
if($g> 0x7F) //you can also use 0x3F 0x4F 0x5F 0x6F its on you
$g=0xFF;
else
$g=0x00;
您的完整代码应该是:
<?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
//$g = (r + g + b) / 3
if($g> 0x7F) //you can also use 0x3F 0x4F 0x5F 0x6F its on you
$g=0xFF;
else
$g=0x00;
$val = imagecolorallocate($im, $g, $g, $g);
// Set the gray value
imagesetpixel ($im, $i, $j, $val);
}
}
header('Content-type: image/jpeg');
imagejpeg($im);
?>
您也可以使用以下替代代码逻辑
<?php
header("content-type: image/jpeg");
$img = imagecreatefromjpeg('1.jpg');
imagefilter($img, IMG_FILTER_GRAYSCALE); //first, convert to grayscale
imagefilter($img, IMG_FILTER_CONTRAST, -255); //then, apply a full contrast
imagejpeg($img);
?>