2012-10-27 18 views
0

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

  • 的Mac OS X 10.8.2
  • 红宝石1.9.3p286(二○一二年十月十二日修订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

  • AFTER:

enter image description here

回答

0

JPG文件没有alpha通道,因此不能有任何透明或半透明的像素。边框就是那个正在消失的黑色常规边框,通过文件转换变成不透明的。

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。

+0

谢谢大家。那么,有没有RMagic的命令来修正这个问题?谢谢! –