田舎の技術者が奮闘中

php ruby node.js javascript などのスクリプト言語とサーバー(Chef、Vagrant)に関して書きます。

rubyからRMagickで加工してS3に画像をアップする。

RubyからS3に画像をアップするサンプルです。
普通はサムネイル画像などを作成してアップすると思いますが、意外とサンプルが無かったのでメモ代わりに書きます。
処理の順番としては、サーバーにある画像をRMagickで加工→バイナリでS3にアップします
S3にアップする方法は3通りほどありますが、今回はメモリ上にバイナリデータとして保持し処理を行います。(いままで、画像を加工してサーバーに一度保存してからS3にアップしてました・・・)

準備するもの

  1. AWSのアカウント
  2. S3バケットの準備
  3. imageMagicのインストール
  4. RMagickとaws-sdk

コード

require 'RMagick'
require 'aws-sdk'

AWS.config(
           :access_key_id => '************',
           :secret_access_key => '************'
           )

s3 = AWS::S3.new
bucket = s3.buckets['my_bucket']
image = Magick::Image.read('image.png').first

thumbnail_image = image.resize_to_fill('300', '300', Magick::NorthWestGravity).to_blob
object = bucket.objects['s3_image.png']
object.write(thumbnail_image)

ここで重要なのは「to_blob」というメソッドです。
これを書くだけで、いけちゃいます。