我是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);
有人可以告诉我如何解决我的问题吗?谢谢!
答案 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压缩过程产生的伪像会破坏纯色,因此只需检查例如红色或蓝色就不起作用。