RMagickでよく使う画像処理
準備
Rubyで画像を編集するのにRMagickというgemを使う。
※ImageMagickという画像操作ソフトウェアをRubyから使えるようにするものなので、そもそもOSにImageMagickをインストールしておく必要がある。OSごとの詳細はRMagickのGitHubリポジトリにある:
GitHub - rmagick/rmagick: Ruby bindings for ImageMagick
gemがインストールできたら、
require 'rmagick' include Magick
で使えるようになる。
よく使う処理
PDFをpngにする
(RからPDFで出力→pngやjpgに変換→Webで表示、とか、PDFでサムネイル作るとか)
画像読み込み
image = ImageList.new(file_path)
サイズが知りたい(縦横のピクセル数)
image.columns image.rows
任意の部分を切り出して保存
slice = image.crop(50, 50, 200, 200) #左上が座標(0, 0)で、(50, 50)の位置から(250, 250)までを切り出し
画像を結合
image_list = Magick::ImageList.new("pic1.jpg", "pic2.jpg") { self.quality = 100 } new_img = image_list.append(true) #true: pic1->pic2(top->bottom), false: pic1->pic2(left->right) new_img.write("joined.jpg") { self.quality = 100 }
回転
rotated = img.rotate(45) #degree
保存時の画質設定
slice.format = 'JPEG' slice.write("pic.jpg") { self.quality = 100 }
ImageMagickは、JPEG/MIFF*1/PNG保存時のデフォルトのqualityが「75」なので、できるだけきれいに保存したい場合は明示的に「100」を指定する。
ImageMagickは、過去に脆弱性が発覚したこともあるので*2、外部からアクセス可能なサーバにインストールする場合は注意する必要がありそうです。
※私が使っているケースは、
などです。
*1:MIFFって何?と思ったらImageMagickの独自フォーマットのようです。