#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
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS