- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来源是 RGBA PNG 图像(color_type=6 和 bit_depth=8)。
我需要一张带有索引颜色和 2 个调色板项(color_type=3,bit_depth=1)的图像。
我尝试使用 ImageMagick,但只能达到 1 位灰度图像(color_type=0,bit_depth=1)或 2 位索引彩色图像(color_type=3,bit_depth=2),其中只使用了 2 种颜色。
根据 PNG 规范,这样的图像是可能的,但是如何创建它呢?
这是我要转换的图像:
“convert input.png -type palette -depth 1 output.png”的结果
:
“convert input.png -type palette -depth 1 -colors 2 output.png”的结果
两个结果的 bit_depth=2,但第二个结果仅使用 4 种可能的 2 种颜色。
最佳答案
使用以下 3 个中的一个,在输出文件中从最少到最多的辅助标签排序:
convert -colors 2 -define png:include-chunk=none -verbose input.png output.png
convert -colors 2 -define png:exclude-chunk=bkgd -verbose input.png output.png
convert -colors 2 -background #000000 -verbose input.png output.png
这个问题的根源是 ImageMagick 默认情况下用白色标记图像 background color (bKGD) PNG chunk (我会说不必要),然后将这种颜色添加到调色板中(如果它不存在),即使图像没有该颜色的像素。您的特定图像在转换为 2 色后没有白色,因此不需要的背景色标签变为第 3 色,它不能再保存为 1 位索引彩色图像。另见 this from the author of IM .
其他人未能重现该问题的原因可能是他们使用两种颜色中的一种恰好是白色的图像进行了测试。
-define png:include-chunk=none
的第一个选项通过根本不输出任何辅助 PNG block (例如 bKGD、gAMA、cHRM、tEXt、tIME)来避免这个问题。像 pngcrush -rem alla
。对于一个不那么困惑的文件,我更喜欢这个(没有它,即使它们不在输入文件中,IM 也会添加其中的一些)。 注意:还有一个简单的-strip
选项,should avoid most of these , 但从 v6.9.3 开始,由于一个错误,它不会削减 bKGD。
第二个 -define png:exclude-chunk=bkgd
仅删除有问题的背景 block 。
带有 -background #000000
的第三个选项保留所有辅助 PNG block ,包括 bKGD,但将其设置为黑色,即图像中存在的两种颜色之一,因此它仍然可以是 1 位。为既非白色也非黑色的图像调整颜色。
请注意,对于所有这些,我都包括了 -verbose
开关。不要过于冗长;只是从零到两行状态输出,如果图像保持 2 色,你会注意到一个“2c”,如果不是,你会注意到一个“3c”。它还会告诉您调色板减少是否有损。它还为大多数图像输出“8 位 sRGB”,即使是每像素少于 8 位的调色板;这不是您对另一个答案 @johnfound 的评论中的错误,这不是指每像素位数,而是指每颜色位数组件。对于(罕见的)深色图像,它可以超过 8 位。
关于imagemagick - 如何使用 color_type=3 和 bit_depth=1 创建 PNG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27879356/
来源是 RGBA PNG 图像(color_type=6 和 bit_depth=8)。 我需要一张带有索引颜色和 2 个调色板项(color_type=3,bit_depth=1)的图像。 我尝试使
我是一名优秀的程序员,十分优秀!