如何转换"真彩色"图像为"黑白"图片,用PHP?

时间:2016-07-22 03:40:32

标签: php image colors gd

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

*#1*. The original image.

此原始图片保存在: 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);

?>

以下是结果:

*#2*. The gray-scale image.

此灰度图片保存在: 8位图像。

现在,我想将其转换为真实 黑白图像:

*#3*. The black-and-white image.

此黑白照片保存在: 1位图像。

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

1 个答案:

答案 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);

?>