おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

ImageScienceを使ってみる

 RubyKaigiで secondlifeさんが モテる Ruby!で紹介されていた ImageScienceを使ってみた。写真からサムネイルやリサイズされた画像を作るクラス。milookの自己紹介用写真のサイズをこいつで統一しちゃおうというわけ。
 ImageScienceには、 FreeImageRubyInlineが必要なので、こいつを先にインストールしておきます。
 FreeImageのほうはソースをダウンロードして解凍して、make, make install でOK。makeしているときに、g++が必要と言われたら、apt-get install g++ または yum install gcc-c++ などでインストールしてあげます。

make  
make install  

 RubyInlineはrubygemで

sudo gem install RubyInline  

そうしてから、ImageScienceのインストールをします。

sudo gem install image_science  

 ここまできたらあとは使うだけです。
 milookでのイメージアップロードの処理をするフォトモデルのメソッドは次のような感じになりました。

require 'rubygems'  
require 'image_science'  
……  
  def upload_file=(file_field)  
    if !file_field || file_field == ''  
      self.destroy  
    else  
      self.name = base_part_of(file_field.original_filename)  
      self.content_type = file_field.content_type.chomp  
 
      if file_field.kind_of? StringIO  
        work_file = "/tmp/#{self.name}"  
        File.open(work_file, 'w') do |f|  
          f.write file_field.read  
        end  
      else  
        work_file = file_field.path  
      end  
 
      ImageScience.with_image(work_file) do |img|  
        img.cropped_thumbnail(210) do |t|  
          t.save work_file  
          self.data = file_field.read  
          if file_field.kind_of? StringIO  
            File.open(work_file, 'r') do |f|  
              self.data = f.read  
            end  
            File.delete(work_file)  
          end  
        end  
      end  
    end  
  end  

ImageScienceのwith_imageがパス名しか受け付けなかったようだったので、StringIOクラスで渡されてきたときは、一度ローカルに保存する処理が必要になりました。もしかしたら、そんなことしなくてもいい方法がありそうな気もしますが、そこまで時間をかけて調べられなかったので、今日のところはとりあえずこれで。
require ‘rubygems’とrequire ‘image_science’ を忘れがちなので気を付けようっと。
 サムネイルを作るメソッドは、cropped_thumbnailとthumbnailがあるのだけど、thumbnailは縦横比の変更はしない。縦横比を1:1にするのが、cropped_thumbnailです。