是非に及ばず

プログラミングに関する話題などを書いていきます(主にRailsやAndroidアプリ開発について)

RMagickでJPEGを保存する際のクオリティの設定方法

RMagickは手軽に画像フォーマットの変換ができるんだけど、JPEGへ変換した時に画像が汚くなってしまう事がある。理由はデフォルトのクオリティのままだからなんだけど、クオリティの指定方法とか忘れがちなのでメモしておく。
ちなみにRMagickでは、image.fomart = 'JPEG'として簡単にフォーマット変換できるが、
クオリティ(画質)の変更はファイルに保存しなければ出来ないので注意が必要。
かなり不便なんだが、仕様であるなら仕方ない・・・

と思ったら、解決策があったので追記↓
mingos.hatenablog.com

まずは、普通にJPEGに変換して保存するソース

require 'rubygems'
require 'RMagick'

path = './sample.png'
save_path = './sample.jpg'
image = Magick::Image.read(path).first
image.format = 'JPEG'
image.write(save_path)

次にJPEGに変換して保存する時にクオリティを指定するソース

require 'rubygems'
require 'RMagick'

path = './sample.png'
save_path = './sample.jpg'
image = Magick::Image.read(path).first
image.format = 'JPEG'
#image.write(save_path)
image.write(save_path) {
  self.quality = 80 # ← コレ(1〜100)
}

当たり前だけど、こんなのはNG(よく間違うけど)。

class Hoge
  attr_accessor :quality
  ・・・
  def save
    image.write(save_path) {
       self.quality = @quality
    }
  end
end

これをやりたいなら、こうする↓。

class Hoge
  attr_accessor :quality
  ・・・
  def save
    quality = @quality
    image.write(save_path) {
       self.quality = quality
    }
  end
end