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)
  • Mac ポート 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 に変換するときに透明度に対して何らかの処理を行う必要があります。あなたの場合、アルファチャンネルを黒に変換します。

デフォルトの背景色を変更するには、次のようにします。

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')

これにより、背景が白の合成画像が作成されます。次に、構成を平坦化 (2 つの画像: 白い背景 + 元の画像を結合) し、jpg として書き出します。

于 2012-10-27T02:59:05.833 に答える
0

JPG ファイルにはアルファ チャネルがないため、透明または半透明のピクセルを含めることはできません。境界線は、ファイルのトランジションによって不透明になった、フェードアウトする黒の通常の境界線です。

于 2012-10-27T02:54:44.450 に答える