gpt4 book ai didi

imagemagick - 如何使用 color_type=3 和 bit_depth=1 创建 PNG 图像

转载 作者:行者123 更新时间:2023-12-04 00:32:10 25 4
gpt4 key购买 nike

来源是 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 规范,这样的图像是可能的,但是如何创建它呢?

这是我要转换的图像:

enter image description here

“convert input.png -type palette -depth 1 output.png”的结果:

enter image description here

“convert input.png -type palette -depth 1 -colors 2 output.png”的结果

enter image description here

两个结果的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com