我有以下代码使用Ruby RMagick将PNG转换为JPG,转换后的图像总是有一个边框。无论如何要避免它?
这是我在irb中的代码:
irb(main):013:0* image = Magick::Image.read('term.png').first
=> term.png PNG 684x716 684x716+0+0 DirectClass 8-bit 48kb
irb(main):014:0> image.format = "JPG"
=> "JPG"
irb(main):015:0> image.write 'term.jpg'
=> term.png=>term.jpg JPG 684x716 684x716+0+0 DirectClass 8-bit 16kb
以下是之前和之后的图片:
答案 0 :(得分:2)
原始png图像有一个透明通道(窗口周围的透明边框)。 Jpg图像不支持透明度。因此,ImageMagick在转换为jpg时必须对透明度做一些事情。在您的情况下,它将alpha通道转换为黑色。
要更改默认背景颜色,您可以执行以下操作:
i = Magick::ImageList.new
i.read('term.png')
i.new_image(i.first.columns, i.first.rows) { self.background_color = "white" }
i = i.reverse.flatten_images
i.format = "JPG"
i.write('term.jpg')
这将创建一个白色背景的合成图像。然后它将组合变平(合并两个图像:白色背景+原始图像)并将其写成jpg。
答案 1 :(得分:0)
JPG文件没有Alpha通道,因此不能有任何透明或半透明的像素。边框只是褪色的黑色常规边框,通过文件转换变为不透明。