動かざることバグの如し

近づきたいよ 君の理想に

RubyでImageMagick使うにはMiniMagickの方がよい

画像処理の王者ことImageMagickrubyImageMagickを扱うには、RMagick一択だと思っていたが、最近だとMiniMagickというのもあるらしい

MiniMagickのメリット

  • メンテナンスがRMagickより盛ん
  • 書き方がRMagickより直感的(主観
  • メモリの使用量が少ないらしい

本家githubより

I was using RMagick and loving it, but it was eating up huge amounts of memory. Even a simple script would use over 100MB of RAM.

とのこと

試してみる

環境

Gemfileに

gem "mini_magick"

して

require 'mini_magick'
image = MiniMagick::Image.open("test.jpg")
image.resize "200x200"
image.write "test_converted.jpg"

しても

MiniMagick::Invalid: `identify /var/folders/6z/xq_8ddx97hq9hzlgwzjjdjbw0000gn/T/mini_magick20180117-38453-17ka2ql.jpg` failed with error:
identify: unable to load module `/usr/local/Cellar/imagemagick/6.9.6-2/lib/ImageMagick//modules-Q16/coders/jpeg.la': file not found @ error/module.c/OpenModule/1302.
identify: no decode delegate for this image format `JPEG' @ error/constitute.c/ReadImage/504.

とエラーが

解決策

なんでやねんbrew install imagemagickちゃんとしたわと思っていたが、どうもtiff対応のimagemagickでないとダメらしい

ってことで一旦アンインストール

$ brew uninstall imagemagick

libtiff対応のimagemagickインストール

$ brew install libtiff
$ brew install imagemagick --with-libtiff

確認

$ convert -version
Version: ImageMagick 7.0.7-21 Q16 x86_64 2018-01-08 http://www.imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules 
Delegates (built-in): bzlib freetype jng jpeg ltdl lzma png tiff xml zlib

参考リンク