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 というそのまんまのメソッドが用意されています。早速使ってみました。

まずは元となる画像を用意。パブリックドメインの画像を探してきました。
Original

では、やってみます。

$ 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 に書き出してみます。
Reflection
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

result.png はこうなります。
Result

以上で完成。今回試した限りでは JPEG ではまったく透明になりませんでした。環境の問題かもしれませんが、そのような場合でも一度 PNG などに変換してから処理すればよいと思います。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。