【问题标题】:pngcrush causing black background on some imagespngcrush 在某些图像上导致黑色背景
【发布时间】:2014-02-20 22:25:51
【问题描述】:

我正在使用以下方法通过 pngcrush 优化一些 png 图像:

exec(
    "pngcrush -q -blacken -brute -reduce -rem alla -rem text -rem time {$source} {$destination}",
    $output,
    $return_var
);

优化效果非常好,但对于某些图像,png 会在透明度所在的位置创建这些黑色块。

当我删除 -reduce 选项后问题就消失了,但是 PNG 优化的作用很​​小,运行优化根本没有用。

我假设问题与透明度有关,那么有没有办法告诉 pngcrush,跳过 -reduce 命令,仅适用于没有透明度的图像?

【问题讨论】:

  • 我认为是由于您的 png 图像的 MIME 类型。
  • 您能否提供指向显示该行为的源图像的链接?另外,您使用的是什么版本的 pngcrush?当前版本是 1.7.70。

标签: php png pngcrush


【解决方案1】:

不要使用-blacken,因为它是问题的直接原因。

来自the changelog

添加 -blacken 选项,以启用更改任何颜色样本 颜色类型为 4 或 6 的 PNG 文件中的完全透明像素为零, 可能会提高它们的可压缩性。请注意,这是一个 不可逆的有损变化:所有完全透明的底层颜色 像素会丢失,如果它们还不是黑色的话。

可能您的某些透明像素并不像看起来那么透明。

【讨论】:

  • 我尝试删除 blacken,但实际上只有当我删除 -reduce 时问题消失了,但实际上我没有优化。我使用的解决方案是在保存图像之前检查图像是否包含 alpha,如果不包含,我只保存为 jpeg 图像。
  • 有趣——感谢您的跟进。您还能提供显示此行为的文件的链接吗?
【解决方案2】:

我在 v1.7.65 上遇到了这个问题,只有“-reduce”选项。相同的图像和命令在 v1.7.86 上运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2020-08-13
    • 2018-01-05
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多