gpt4 book ai didi

image-processing - 将具有透明度的 PNG 转换为 JPG

转载 作者:行者123 更新时间:2023-12-04 18:21:38 27 4
gpt4 key购买 nike

Edit: The original title of this question was "Drawbacks of using -flatten option". However, after this question was answered, I decided to change its title, to make it easier found on Google. Also, new title is actually better describes what is told below.



正如我今天发现的,要将透明的 PNG 转换为 JPG,我们需要使用 -flatten选项。

自己试试:下载 Google logo并使用以下行将其从 PNG 转换为 JPG
convert google.png google.jpg

图片会乱:

enter image description here

-flatten选项,它工作正常:
convert google.png -flatten google.jpg

我想知道使用 -flatten 有什么缺点吗?永久,用于 PNG、JPG/JPEG 和 GIF 之间的所有转换。

最佳答案

将 PNG 转换为 JPG 的问题在于 PNG 具有透明度。 JPG 不允许透明,任何透明区域都会显示透明下方的颜色,通常是黑色。所以你应该使用 -flatten 来正确地进行转换。但是你应该在 -flatten 之前指定 -background somecolor,如果你不想要默认的背景颜色。 GIF 只允许二元透明——完全透明或完全不透明。 PNG 允许 8 位透明(部分透明)。我知道在将 PNG 或 GIF 转换为 JPG 时使用 -background xx -flatten 没有重大问题。但是,您使用的背景颜色会改变透明区域的外观,而不是底层颜色的外观。这是正在发生的事情:

输入:

enter image description here

关闭阿尔法:

convert google.png -alpha off google_aoff.jpg

enter image description here

条纹来自 Alpha channel 下方的底色。

Alpha channel (很好地抗锯齿):
convert google.png -alpha extract google_alpha.jpg

enter image description here

简单展平(默认背景为白色):
convert google.png -flatten google_flatten.jpg

enter image description here

用黑色背景压平:
convert google.png -background black -flatten google_flatten_black.jpg

enter image description here

通常人们会重新处理原始的透明 PNG 图像,使其在 alpha channel 下方具有一些恒定的颜色,以便稍后可以删除 alpha channel 并且不会显示奇怪的颜色。它看起来与原始 PNG 非常相似。
convert google.png -background white -alpha background google_bg_white.png

enter image description here

但是,如果您简单地删除 alpha channel ,JPG 将显示混叠,因为只有完全透明像素的背景颜色更改为白色。你有一个漂亮干净的背景,但图像仍然是锯齿状的(就像原来的 alpha channel 被删除时一样)。
convert google_bg_white.png google_bg_white.jpg

enter image description here

所以仍然需要将结果展平,以便 alpha channel 的抗锯齿将平滑地混合边界附近的颜色。
convert google_bg_white.png -flatten google_bg_white_flatten.jpg

enter image description here

-flatten 的另一种方法是使用 -alpha remove,讨论了 http://www.imagemagick.org/Usage/masking/#alpha_remove .所以从原始的 PNG 开始,我们做
convert google.png -background white -alpha remove google_alpharemoveoff.jpg

enter image description here

结果与 -background white -flatten 相同。我们不需要引用中提到的 -alpha off,因为 JPG 不支持任何 alpha channel 。引用文献说这更有效并且是首选方法。

关于image-processing - 将具有透明度的 PNG 转换为 JPG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954470/

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