Ruby RMagick格式转换总是留下边框

时间:2012-10-27 01:50:02

标签: ruby rmagick imagick

我有以下代码使用Ruby RMagick将PNG转换为JPG,转换后的图像总是有一个边框。无论如何要避免它?

  • Mac OS X 10.8.2
  • ruby​​ 1.9.3p286(2012-10-12修订版37165)[x86_64-darwin12]
  • rmagick(2.13.1)
  • MacPorts 2.1.2
  • ImageMagick @ 6.8.0-2_0 + q8 + wmf(有效)

这是我在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

以下是之前和之后的图片:

  • BEFOE:

enter image description here

  • 后:

enter image description here

2 个答案:

答案 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通道,因此不能有任何透明或半透明的像素。边框只是褪色的黑色常规边框,通过文件转换变为不透明。