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