0

我有以下代码使用 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

这是之前和之后的图像:

  • 之前:

在此处输入图像描述

  • 后:

在此处输入图像描述

4

2 回答 2

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。

于 2012-10-27T02:59:05.833 回答
0

JPG 文件没有 Alpha 通道,因此不能有任何透明或半透明的像素。边框就是那个褪色的黑色常规边框,被文件转换变得不透明。

于 2012-10-27T02:54:44.450 回答