RMagickを使ってアスペクト比を維持しながら画像をリサイズしてみる

仕様を考えてみる

f:id:araemonz:20180729123052j:plain

  1. Rubyで書いたResizer.rbと同じフォルダに、リサイズしたいPNGまたはJPEGファイルを配置。

  2. Resizerを実行すると、リサイズされた画像がresizedディレクトリに格納され元のデータはmasterへ移動される。

  3. 指定サイズの正方形の大きさの枠内におさまるように、アスペクト比を維持しながらJPEGフォーマットに変換する。

  4. RMagick (RubyでImageMagickを動かす)を使う。

出来上がったプログラムがこちら

resizer.rb

require 'date'
require 'RMagick'
require 'fileutils'

#limit=500
p "リサイズ値を入力してください"
limit = $stdin.gets
p limit

files = Dir.glob("*.{png,PNG,jpg,JPG,jpeg,JPEG}")           # ファイルの配列を返す ["bar", "foo"]
puts(files)
FileUtils::mkdir_p './master'
FileUtils::mkdir_p './resized'

files.each do |filename|
    name = File.basename(filename, ".*") #=> "test"
    img = Magick::ImageList.new(filename)

    File.rename filename, "./master/#{filename}"

new_img = img.resize_to_fit(limit, limit)
    new_img.write("./resized/#{name}.jpg") { self.quality = 90 }

    new_img.destroy! # メモリクリア
end

エラー処理などしていないので注意。

commandファイルを用意してこのプログラムをダブルクリックで実行できるようにした。

#!/bin/bash

cd `dirname $0`

ruby Resizer.rb

RMagickのインストールでつまづく

RMagickをbrewでインストールしようとしたら、エラーが出てインストールできなかった。

Stack Over Flowで問題解決の方法が。

https://stackoverflow.com/questions/41647979/imagemagick-7-with-rmagick-2-16-on-macos-sierra-cant-find-magickwand-h?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

ImageMagickをバージョンダウンすれば良さそうである。

brew uninstall imagemagick

brew install imagemagick@6

brew link --force imagemagick@6

sudo gem install rmagick

これでインストールできた。

感想

  • ファイルを扱うプログラムをRubyでは簡潔に書けるのでありがたい。
  • ImageMagick最高!