如何在PHP中逐像素重绘图像?

时间:2018-07-12 09:59:25

标签: php image-processing

标题说的差不多。转换会增加伪影,尽管我需要一个精确的副本,但只复制了图像本身,从而绝对剥夺了原始文件中可能存在或不存在的所有其他内容。因此,我想我需要以某种方式预渲染然后一次重新创建一个像素的图像,但是我什至没有最模糊的想法。谷歌搜索除转换和刷新之外,没有让我走得更远,因此我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

从图像中剥离所有EXIF,GPS,IPTC,作者,版权和颜色配置文件的一种方法是使用 ImageMagick ,该功能可在所有Linux发行版以及macOS和Windows上使用。

在命令行中,您可以这样做:

convert input.jpg -strip output.jpg

如果要使用PHP做到这一点,可以使用 Imagick 等效项:

bool Imagick::stripImage ( void )

,已记录在here中。这样看起来像:

// Load input image and strip everything
$image = new Imagick('start.jpg');
$image->stripImage();

// Output result
$image->writeImage('result.jpg');

另一种,也许更简单,更轻便的方法是使用exiftool(这是“只是一个简单的” Perl 脚本,而不是庞大的程序包)像这样的 ImageMagick ):

exiftool -all= YourImage.jpg

如果发现更简单,也可以使用system()从PHP“脱壳”以运行这些命令。


如果对此有绝对的偏执,则可以转换为完全不支持元数据的中间格式,例如NetPBM格式(Wikipedia link),然后再返回JPEG,如下所示:

convert YourImage.jpg -strip pam:- | convert pam:- result.jpg

如果您想知道为什么我仍然使用上面的-strip,那是因为NetPBM确实支持注释,所以我想摆脱它们。如果您想知道为什么我选择PAM格式而不是PPM,那么它可以用于可能具有4个通道(即RGB和透明)的PNG文件。


您可以使用以下方法检查图像中仍然包含哪些信息:

jhead -v YourImage.jpg

或者:

exiftool YourImage.jpg

或者,您可以在图像中找到所有类似文本的字符串,然后使用grep查找并查看是否有您不希望看到的东西滑过:

strings YourImage.jpg | grep -Ei "copyright|latitude|longitude|author"