#author("2018-04-20T14:21:32+09:00","default:wikiwriter","wikiwriter") #author("2018-08-31T15:13:28+09:00","default:wikiwriter","wikiwriter") &tag(RMagick); *目次 [#s9d51154] #contents *関連ページ [#c9f83d31] *参考情報 [#w81d82c4] *概要 [#ydf5036d] -RubyからImageMagickを利用するためのライブラリ。 -C言語ライブラリなのでビルドする際、ImageMagickのヘッダーファイルやライブラリが必要となる。 -このためビルド時にエラーとなりがち。 -HomebrewなどでImageMagickライブラリが入れ替わった場合も、dlopenエラーなどが発生することがある。 -ImageListとImageを操作する。 *インストール [#md0b262f] -CentOS 6の場合 yum install ImageMagick-devel *基本的な使用方法 [#m1e9837f] **画像を結合する [#r463dce1] -ImageListを生成しmontageで結合する。画像の最後が出力ファイル名。 #pre{{ def concat_images(*images) # 画像を結合して出力 images_files = images[0..images.length - 2]; file_name = images.last image_final = Magick::ImageList.new(*images_files) result = image_final.montage result.write file_name end }} **画像を結合し間に空白も追加する。 [#x71f0ddd] -ImageListを生成しappendで結合する。spliceで空白を追加する。 #pre{{ def append_images(*images) # 画像を結合し間に空白を追加して出力 images_files = images[0..images.length - 2]; file_name = images.last image_final = Magick::ImageList.new(*images_files) result = image_final.append(false) # 結合方向 width = result.columns height = result.rows puts width puts height # 間にスペースを追加する padding = 10 if height > 1000 padding = 20 end result = result.splice(width / 2, 0, padding, 0) # 画像を10字に切るメソッドみたい # 結果をファイルに書き出す result.write file_name end }} **画像を結合し透明色の色も指定する [#iab50f7b] -appendでpngを結合すると背景色が黒になってしまう。白にしたい場合画像ファイルごとにImageListを生成し、background_colorとflatten_imageを組み合わせて背景色の変換を行うしかない? #pre{{ def append_images(*images) #結合元の画像ファイル名 image_files = images[0..images.length - 2]; #出力画像名 file_name = images.last #最終的な画像リスト result_image_list = Magick::ImageList.new image_files.each do |image_file| #background_colorとflatten_imagesを組み合わせて背景色を指定 image_list = Magick::ImageList.new(image_file) {self.background_color = 'white'} image = image_list.flatten_images result_image_list << image end #結果を結合 result = result_image_list.append(false) result.write file_name end append_images(*ARGV) }} **オリジナル画像に余白を追加しセンタリングする [#yc4581e3] -RMagick単体では結構困難? -CarrierWaveの実装を参照にすると以下のようになるらしい。[[ruby on rails - RMagick changing image extents with gravity - Stack Overflow:https://stackoverflow.com/questions/5831546/rmagick-changing-image-extents-with-gravity]] #pre{{ require "rmagick" module Converter def self.resize_and_pad(img, new_img_path, width, height, background=:transparent, gravity=::Magick::CenterGravity) img.resize_to_fit!(width, height) new_img = ::Magick::Image.new(width, height) if background == :transparent filled = new_img.matte_floodfill(1, 1) else filled = new_img.color_floodfill(1, 1, ::Magick::Pixel.from_color(background)) end # destroy_image(new_img) filled.composite!(img, gravity, ::Magick::OverCompositeOp) # destroy_image(img) # filled = yield(filled) if block_given? # filled filled.write new_img_path end end srcfile = ARGV[0] dstfile = ARGV[1] puts "srcfile=#{srcfile} dstfile=#{dstfile}" img = Magick::Image.read(srcfile).first #img = img.resize_and_pad(200, 100, 'red', Magick::CenterGravity) #img.write(dstfile) Converter::resize_and_pad(img, dstfile, 200, 100, 'red', Magick::CenterGravity) }} *トラブルシューティング [#qf5a7b34] **RMagickがmacOS High Sierraにインストールできない [#y055c982] -HomebrewでインストールできるImageMagickはver 7だが、RMagickはImageMagick 6にしか対応していない(2017/11/07(火)現在)。 -以下のようにしてインストールする。 #pre{{ $ brew uninstall imagemagick $ brew install imagemagick@6 $ PKG_CONFIG_PATH=/usr/local/opt/imagemagick@6/lib/pkgconfig gem install rmagick }} -rmagickを依存関係でインストールするgemをインストールする場合も同様 $ PKG_CONFIG_PATH=/usr/local/opt/imagemagick@6/lib/pkgconfig gem install rmagick **RMagickを使っているRubyプログラムでLibrary not loadedエラーが発生。 [#r5e56de2] -ImageMagickをアップデートした場合、以下のようなエラーが発生することがある。 #pre{{ /Users/sora/.anyenv/envs/rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': dlopen(/Users/sora/.anyenv/envs/rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rmagick-2.16.0/lib/RMagick2.bundle, 9): Library not loaded: /usr/local/opt/imagemagick@6/lib/libMagickWand-6.Q16.4.dylib (LoadError) }} -一端rmagicをuninstallしてインストールしなおせばよい。 #pre{{ gem uninstall rmagick PKG_CONFIG_PATH=/usr/local/opt/imagemagick@6/lib/pkgconfig gem install rmagick }}