0

我是 PHP 新手,我正在尝试从服务器上的 JPEG 图像中删除颜色。理想情况下,我希望能够去除图像中除黑色或灰色之外的所有颜色。我已经在下面发布了我到目前为止所做的代码,但它不起作用(或者它正在工作但我没有正确显示它)。当我运行代码时,我的屏幕上什么也没有。到目前为止,这是我的 index.php 文件中的所有代码:

$my_image='Photo.jpg';
header('Content-Type: image/jpeg');

$img = imagecreatefromjpeg($my_image); 
$color = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $color);
imagejpeg($my_image, null);

有人可以告诉我如何解决我的问题吗?谢谢!

4

1 回答 1

1

你有几个问题:

  • imagecreatefromstring不从文件加载图像,而是采用包含图像数据的字符串。imagecreatefromjpeg将从文件加载。
  • 要将页面显示为图像,您必须发送正确的标题。例如,header('Content-Type: image/jpeg');
  • imagejpeg输出图像。返回值只是它是否成功。查看文档中的示例。

要删除不是黑色/灰色/白色的每种颜色,您可能必须单独检查每个像素,如下所示:

<?php
header('Content-type: image/jpeg');
$image = imagecreatefromjpeg('file.jpg');

$white = imagecolorallocate($image, 255, 255, 255);

for($x = 0; $x < imagesx($image); $x++) {
   for($y = 0; $y < imagesy($image); $y++) {
      $pixel = imagecolorat($image, $x, $y);
      if(!isGray($pixel))
         imagesetpixel($image, $x, $y, $white);
   }
}

imagejpeg($image);

function isGray($pix) {
   $r = ($pix >> 16) & 0xFF;
   $g = ($pix >> 8) & 0xFF;
   $b = $pix & 0xFF;
   return ($r == $g) && ($g == $b);
}
?>

由于您使用的是 JPG,我想不出更简单的方法。JPG 压缩过程产生的伪影会破坏纯色,因此简单地检查红色或蓝色是行不通的。

该代码改编自https://stackoverflow.com/a/1607796/246847

于 2012-11-04T06:09:16.107 回答