PHP背景图像颜色

问题描述:

我是新来的PHP,我试图从我的服务器上的JPEG图像中删除颜色。理想情况下,我希望能够去除图像中除黑色或灰色以外的所有颜色。我已经发布了代码,下面介绍了迄今为止所做的工作,但它不工作(或者它正在工作,但我没有正确显示)。当我运行代码时,屏幕上什么都没有。这是我的index.php文件到目前为止的所有代码: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); 

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

+0

** $ output_file_name **尚未创建。 – fvgs

+0

@Wolfram对不起,我忘了编辑它。谢谢!。我编辑过它。我只是简单地使用$ my_image来希望覆盖旧的图像? –

你有几个问题:

  • 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://*.com/a/1607796/246847

+0

感谢您的快速回复。我已经完成了你的建议,但得到了错误:图像“http://xxx.xxx.xx/testing/index.php”无法显示,因为它包含错误“你知道为什么会发生这种情况吗?编辑我的代码,再次感谢,我真的很感激 –

+0

你可以在文件的顶部添加'ini_set('display_errors',1); error_reporting(E_ALL);'注释掉'header',看它是否打印任何错误? –

+0

汤姆,我相信我有它的工作,但我必须道歉,因为这不是我想要的效果,我希望代码去除图像本身的颜色,而不是页面的背景,所以我很抱歉。接受你的答案,但你有没有机会知道如何做我刚才解释的?这真的意味着很多谢谢 –