修改:此问题的原始标题为"使用
-flatten
选项" 的缺点。但是,在回答了这个问题之后,我决定更改它的标题,以便在Google上找到它。此外,新标题实际上更好地描述了下面的内容。
正如我今天发现的,要将PNG的透明度转换为JPG,我们需要使用-flatten
选项。
亲自试用:下载Google logo并使用以下行将其从PNG转换为JPG
convert google.png google.jpg
图片会混乱:
使用-flatten
选项,它可以正常工作:
convert google.png -flatten google.jpg
我想知道,对于PNG,JPG / JPEG和GIF之间的所有转换,永久使用-flatten
是否有任何弊端。
答案 0 :(得分:5)
将PNG转换为JPG的问题是PNG具有透明度。 JPG不允许透明度,任何透明区域都会显示透明度下面的颜色,通常是黑色。所以你应该使用-flatten来正确地进行转换。但是如果你不想要默认的背景颜色,你应该在-flatten之前指定-background somecolor。 GIF仅允许二进制透明度 - 完全透明或完全不透明。 PNG允许8位透明(部分透明)。我知道在将PNG或GIF转换为JPG时使用-background xx -flatten没有重大问题。但是,您使用的背景颜色将改变透明区域中的外观与下方颜色的外观。以下是发生的事情:
输入:
关闭alpha:
convert google.png -alpha off google_aoff.jpg
条纹来自Alpha通道下方的下方颜色。
Alpha Channel(很好地抗锯齿):
convert google.png -alpha extract google_alpha.jpg
简单展平(默认背景为白色):
convert google.png -flatten google_flatten.jpg
用黑色背景展平:
convert google.png -background black -flatten google_flatten_black.jpg
通常会重新处理原始透明PNG图像,使其在Alpha通道下方具有一些恒定颜色,以便后来可以删除Alpha通道而不显示奇数颜色。它看起来与原始PNG完全相同。
convert google.png -background white -alpha background google_bg_white.png
但是,如果您只是删除Alpha通道,JPG将显示锯齿,因为只有完全透明像素的背景颜色变为白色。你有一个漂亮干净的背景,但图像仍然是别名(因为它删除了alpha通道时的原始图像。)
convert google_bg_white.png google_bg_white.jpg
因此,仍然需要将结果展平,以便alpha通道的抗锯齿能够平滑地混合边界附近的颜色。
convert google_bg_white.png -flatten google_bg_white_flatten.jpg
-flatten的另一种方法是使用-alpha remove,讨论http://www.imagemagick.org/Usage/masking/#alpha_remove。所以从原始的PNG开始,我们做
convert google.png -background white -alpha remove google_alpharemoveoff.jpg
结果与-background white -flatten相同。我们不需要参考中提到的-alpha off,因为JPG不支持任何alpha通道。该参考文献称这是更有效的,也是首选方法。
答案 1 :(得分:1)
@John C
写道:
1st approach:
convert google.png -flatten google_flatten.jpg
2nd approach:
convert google.png -background white -alpha background google_bg_white.png
convert google_bg_white.png -flatten google_bg_white_flatten.jpg
3rd approach:
convert google.png -background white -alpha remove google_alpharemoveoff.jpg
更恰当的是,这些应该是
1st approach
convert google.png -background white -flatten google_flatten.jpg
2nd approach
convert google.png -background white -alpha background -flatten google_bg_white_flatten.jpg
3rd approach
convert google.png -background white -alpha remove -alpha off google_alpharemoveoff.jpg
在案例1中: - 背景白色是默认值。但是如果你想要一些其他背景颜色,你需要指定它。
在案例2中:无需保存到中间文件
在案例3中:如果保存到PNG,则需要-alpha off。 JPG不支持透明度,因此不需要关闭alpha。