GD imagejpeg()压缩?

时间:2011-07-03 05:55:43

标签: php compression gd steganography

我正在开发一个项目,我使用GD库在PHP中编辑jpg的像素。 它的非常关键是我的项目的关键,PHP 的输出保留了我设置的像素值(咳嗽 - 咳嗽 - 咳嗽)。

这是我第一次尝试在PHP中进行图像处理。在我的Java实现之前我没有遇到过任何问题,所以在进一步研究之前,我没有调查GD的jpeg压缩质量是愚蠢的。

事实证明,经过我的努力,我的代码没有按照预期的方式运行。我很确定这不是我的代码(在编辑过的图像资源上测试了编码和解码功能,并且它们有效)。

我的问题是:

  1. 我能看到的唯一问题是imagejpeg()的压缩。我可以是对的吗?

  2. 是否有任何库提供我需要的压缩?(保留我更改的像素值)

3 个答案:

答案 0 :(得分:3)

默认情况下,imagejpeg输出的图像质量为75,尝试将其设置为100以使图像达到最佳质量。

  bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )

查看manual以获取更多详细信息。

也可以尝试使用imagecopyresampled。 (我想你会在你的代码中的某个地方使用imagecopyresized。使用imagecopyresampled代替它。)

修改

然后我认为你应该尝试ImageMagick(或GD2)。它提供比GD更好的质量。查看this

答案 1 :(得分:2)

如果逐像素地执行steganography JPEG 文件格式不太适合隐写术。

JPEG 使用图像压缩 - 即使质量最高 - 也会破坏每个像素上位级别的信息。 jpeg压缩类型( lossy compression )用于人眼/大脑保留图像,但不保留文件中图像的位。

您需要使用能够保留像素的图像格式 - 正如您已经编写的那样。这种格式更可能是带有 RLE 压缩的 BMP 或带有 ZIP RLE的 TIFF 图像格式压缩。这叫做 lossless data compression

答案 2 :(得分:0)

使用imagepng()代替imagejpeg()函数并将压缩设置为0:

bool imagepng ( resource $image [, string $filename [, int $quality [, int $filters ]]] )

请参阅:http://php.net/manual/en/function.imagepng.php