PHP背景图像颜色

时间:2012-11-04 05:26:10

标签: php web-services web

我是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);

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

1 个答案:

答案 0 :(得分:1)

你有几个问题:

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

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

<?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