トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Tag: RMagick

目次

関連ページ

参考情報

概要

  • RubyからImageMagickを利用するためのライブラリ。
  • C言語ライブラリなのでビルドする際、ImageMagickのヘッダーファイルやライブラリが必要となる。
  • このためビルド時にエラーとなりがち。
  • HomebrewなどでImageMagickライブラリが入れ替わった場合も、dlopenエラーなどが発生することがある。
  • ImageListとImageを操作する。

基本的な使用方法

画像を結合する

  • ImageListを生成しmontageで結合する。画像の最後が出力ファイル名。
    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
    
    

画像を結合し間に空白も追加する。

  • ImageListを生成しappendで結合する。spliceで空白を追加する。
    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
    

画像を結合し透明色の色も指定する

  • appendでpngを結合すると背景色が黒になってしまう。白にしたい場合画像ファイルごとにImageListを生成し、background_colorとflatten_imageを組み合わせて背景色の変換を行うしかない?
    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)
    

オリジナル画像に余白を追加しセンタリングする

  • RMagick単体では結構困難?
  • CarrierWaveの実装を参照にすると以下のようになるらしい。ruby on rails - RMagick changing image extents with gravity - Stack Overflow
    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)
    

トラブルシューティング

RMagickがmacOS High Sierraにインストールできない

  • HomebrewでインストールできるImageMagickはver 7だが、RMagickはImageMagick 6にしか対応していない(2017/11/07(火)現在)。
  • 以下のようにしてインストールする。
    $ 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エラーが発生。

  • ImageMagickをアップデートした場合、以下のようなエラーが発生することがある。
    /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してインストールしなおせばよい。
    gem uninstall rmagick
    PKG_CONFIG_PATH=/usr/local/opt/imagemagick@6/lib/pkgconfig gem install rmagick
    
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-20 (金) 14:21:33 (59d)