gpt4 book ai didi

python - 如何使用 Python Wand 修复奇怪的 IHDR 属性?

转载 作者:行者123 更新时间:2023-12-01 01:23:48 30 4
gpt4 key购买 nike

我正在尝试生成一个 RGBA PNG 文件,该文件的格式与我正在使用的 RIP 软件兼容。问题是它不喜欢 Wand 生成的透明度数据。我有一个 RIP 软件喜欢的示例文件。我使用 Imagemagick“identify -verbose”命令来检查已知良好文件的属性。我发现,尽管许多其他属性与我的文件匹配,但 IHDR 属性却非常不同。在正确加载的文件中我看到:

png:IHDR.bit-depth-orig: 8
png:IHDR.bit_depth: 8
png:IHDR.color-type-orig: 6
png:IHDR.color_type: 6 (RGBA)

This is the example file that loads properly(在 Chrome 中,透明背景看起来是黑色的)

当我检查用 Wand 生成的文件的属性时,我看到:

png:IHDR.bit-depth-orig: 4
png:IHDR.bit_depth: 4
png:IHDR.color-type-orig: 3
png:IHDR.color_type: 3 (Indexed)
png:PLTE.number_colors: 8

This is the example file that FAILS to load properly(在 Chrome 中,透明背景看起来是黑色的)

我正在使用:

ImageMagick 7.0.8-12 Q16 x86_64 2018-10-23
Wand==0.4.4

绘制此文件的代码在透明背景上创建三个彩色框作为打印机测试图案。这是:

from wand.image import Image
from wand.color import Color
from wand.drawing import Drawing

depth = 32
max_dpi = 300
width = 600
height = 600

big_square_color = Color('blue') #Color('transparent')
med_square_color = Color('red')
small_square_color = Color('green')
background_color = Color('transparent')

# with Image(width=width, height=height, resolution=max_dpi, depth=depth, background=background_color) as source_img:
with Image(width=width, height=height, resolution=max_dpi, background=background_color) as source_img:
source_img.depth = 8
with Drawing() as draw:

# Draw a big box in the middle
draw.stroke_color = draw.fill_color = big_square_color
draw.rectangle(left=(width/16), top=(height/16), right=width-(width/16), bottom=height-(height/16))

# Draw a smaller box in the middle
draw.stroke_color = draw.fill_color = med_square_color
draw.rectangle(left=(width/8), top=(height/8), right=width-(width/8), bottom=height-(height/8))

# Draw the smallest box in the middle
draw.stroke_color = draw.fill_color = small_square_color
draw.rectangle(left=(width/4), top=(height/4), right=width-(width/4), bottom=height-(height/4))

draw(source_img)

source_img.format = 'png'
source_img.units = 'pixelspercentimeter'
source_img.colorspace = 'srgb'
source_img.type = 'truecolor'
source_img.alpha_channel = True

source_img.save(filename='output.png')

浏览 Imagemagick 和 Wand 的文档,我没有找到强制使用 IHDR 值的方法。有谁知道如何更改 Wand.Image 对象的属性以获得 IHDR.color_type:6 和 png:IHDR.bit_depth:8?

最佳答案

马克的评论是正确的。 PNG 编码器认为没有足够的图像数据来证明 RBGA 颜色类型,因此它使用 INDEXED 调色板优化图像。在出站文件名中添加 PNG32: 协议(protocol)前缀,或设置 source_img.format = 'PNG32' 应该可以。

Looking through the documentation for Imagemagick and for Wand I don't see a way to force the IHDR values.

安东尼的Usage docs涵盖了这一点,但在“哦顺便说一句”评论中阅读了更多内容。魔杖的documentation最近开始暗示委托(delegate)协议(protocol),但我同意,这也可以在这个主题上使用更好的细节/覆盖范围。这两份文档都没有引起人们对 IHDR(图像标题)的太多关注,因此这可能不是搜索的最佳关键术语。

关于python - 如何使用 Python Wand 修复奇怪的 IHDR 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53533406/

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