【问题标题】:GD imagejpeg() compression?GD imagejpeg() 压缩?
【发布时间】:2011-09-27 12:41:07
【问题描述】:

我正在做一个项目,我使用 GD 库在 PHP 中编辑 jpg 的像素。 它非常重要,也是我项目的关键,PHP 的输出保留了我设置的像素值 (cough-steganography-cough)。

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

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

我的问题是:

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

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

【问题讨论】:

    标签: php compression gd steganography


    【解决方案1】:

    默认情况下,imagejpeg 输出的图像质量为 75,尝试将其设置为 100 以获得完整质量的图像。

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

    查看manual 了解更多详情。

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

    编辑

    那我觉得你应该试试ImageMagick(或GD2)。它提供了比 GD 更好的质量。检查this

    【讨论】:

    • 啊,我忘了说我确实将质量设置为 100,没有运气。我也不在我的代码中使用 imagecopyresized :/
    • 啊。不幸的是,我认为我正在使用 GD2。我会给 ImageMagick 一个镜头,但我当前的网络主机不支持它/允许我安装。 -sigh- 我的盘子又增加了一个问题
    • 认为这就是 PHP 可以为您提供的一切。 :)
    【解决方案2】:

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

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

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

    【讨论】:

    • 我想我会尝试使用 GD 支持的 PNG 或 GIF。谢谢(你的)信息。稍后会发布结果!
    • ...PNG 效果很好!感谢您对压缩类型与文件类型的提醒,我忽略了这一点。
    【解决方案3】:

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

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

    见:http://php.net/manual/en/function.imagepng.php

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2023-03-24
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多