RMagick で画像に Wet floor effect を適用する
2007/09/29
Wet floor effect – Wikipedia, the free encyclopedia
画像や文字が床に反射しているようなエフェクトは Wet floor effect と呼ばれるらしい。確かにぬれた床っぽい。Wikipedia によると、Apple が初めにメジャにしたらしい。
僕もいろんな画像をぬれた床に映してやりたいのですが、Photoshop を使うほどのことじゃないし、そもそも Photoshop 入ってません。そこで我らが RMagick の出番です。
RMagick は ImageMagick の Ruby 用インタフェースで、ImageMagick がインストールされている環境なら gem でゴリっとインストールできます。
$ sudo gem install rmagick
RMagick のドキュメントを見ると、RMagick 1.15.0 以降には wet_floor というそのまんまのメソッドが用意されています。早速使ってみました。
まずは元となる画像を用意。パブリックドメインの画像を探してきました。
では、やってみます。
$ irb
>> gem 'rmagick'
=> true
>> require 'RMagick'
=> true
>> include Magick
=> Object
>> originals = ImageList.new('original.png') # 元画像から ImageList オブジェクト生成
=> [originalpng PNG 176x240 176x24000 DirectClass 8-bit 88kb]
scene0
>> reflection = originals.first.wet_floor # wet_floor を呼ぶ
=> originalpng PNG 176x240=>176x80 176x24000 DirectClass 8-bit 88kb
>> reflection.write('reflection.png') # wet_floor の結果をファイルに書き出す
=> originalpng=>reflectionpng PNG 176x240=>176x80 176x24000 DirectClass 8-bit 35kb
こんな感じで、wet_floor の結果を reflection.png
に書き出してみます。
wet_floor で生成される Image オブジェクトは映り込みの部分だけなので、実際に使う場合には元の画像とくっつけて出力する必要があります。
>> results = ImageList.new
=> []
scene
>> results << originals.first < [originalpng PNG 176x240 176x24000 DirectClass 8-bit 88kb
originalpng=>reflectionpng PNG 176x240=>176x80 176x800240 DirectClass 8-bit 88kb]
scene1
>> result = results.append(true)
=> originalpng PNG 176x240=>176x320 176x32000 DirectClass 8-bit 88kb
>> result.write('result.png')
=> originalpng=>resultpng PNG 176x240=>176x320 176x32000 DirectClass 8-bit 137kb
以上で完成。今回試した限りでは JPEG ではまったく透明になりませんでした。環境の問題かもしれませんが、そのような場合でも一度 PNG などに変換してから処理すればよいと思います。