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);
有人能告诉我如何解决我的问题吗?谢谢!
你有几个问题:
-
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压缩过程产生的伪像会破坏纯色,因此只需检查(如红色或蓝色)将无法工作。
感谢您的快速回复。我已经完成了你的建议,但得到了错误:图像“http://xxx.xxx.xx/testing/index.php”无法显示,因为它包含错误“你知道为什么会发生这种情况吗?编辑我的代码,再次感谢,我真的很感激 –
你可以在文件的顶部添加'ini_set('display_errors',1); error_reporting(E_ALL);'注释掉'header',看它是否打印任何错误? –
汤姆,我相信我有它的工作,但我必须道歉,因为这不是我想要的效果,我希望代码去除图像本身的颜色,而不是页面的背景,所以我很抱歉。接受你的答案,但你有没有机会知道如何做我刚才解释的?这真的意味着很多谢谢 –
** $ output_file_name **尚未创建。 – fvgs
@Wolfram对不起,我忘了编辑它。谢谢!。我编辑过它。我只是简单地使用$ my_image来希望覆盖旧的图像? –