仕事でImageMagickで画像処理をしていたのですが、中間ファイルをいろいろ作る必要があったので、ファイルの掃除も考慮してくれるTempfileを組み合わせて使ってみました。

  • テスト環境
    • Ruby 1.9.3
    • RMagick 2.13.1
    • ImageMagick 6.7.9-10
  • Railsを使っているとアップロードされたファイルはTempfileとして扱われる
    • サイズによってはStringIOとして扱われていた時代もあった気がしますが・・・昔の話のはず
  • 画像処理で中間ファイルを作る場合、ごみを残さないTempfileは便利

require 'RMagick'
require 'tempfile'

# アップロードされたファイル
uploaded_file = params[:file]

# TempfileからImageを作成する
# from_blobはArrayを返すので、shiftして先頭の要素を取得
image = Magick::Image.from_blob(File.read(uploaded_file.path)).shift

# 画像フォーマットの確認
puts image.format

# なんかいろんな処理

# Tempfileの作成
tempfile = Tempfile.open(temp_filename)

# Tempfileへの書き込み
# フォーマットの指定が便利
image.write("png:" + tempfile.path)

# なんかいろんな処理

# Tempfileの削除
tempfile.close!


■ 参考


Posted by あかさた
最近のエントリ
最近の読書メモ