2007-09-24
■昭和の写真ジェネレータの作り方
予想外に人気を博してしまった 昭和の写真ジェネレータ(仮) ですが、画像加工の方法を公開しておきます。
[追記] 以下のコードは説明用です。なお、実際に動いているコード(に限りなく近いもの) を CodeRepos に up しました。svnはこちらから
用意するもの。

モジュールを load して、画像を Imager オブジェクトに読み込みます。
use Imager; use Imager::Fill; use List::Util qw/ min max /; my $img = Imager->new; $img->read( file => "source.jpg" );
コントラストを落とします。

$img->filter( type => "contrast", intensity => 0.7 );
少々ぼかします。(小さいと分かりにくいですが)

$img->filter( type => "conv", coef => [ 0, 1, 0.2 ] );
フチをつけます。

元画像よりもフチのサイズ分だけ大きい画像を #bbbbbb で塗りつぶして用意し、その上に元画像を paste です。色が #ffffff ではなく #bbbbbb なのは、この後のカラー処理の都合上。
この部分のコードは Imager に付いてくる border.pl を参照しました。
$img = solid_border( $img, "#bbbbbb" ); sub solid_border { my ( $source, $color ) = @_; my $w = $source->getwidth(); my $h = $source->getheight(); my $border = int ( max( $w * 0.015, $h * 0.015, 5 ) ); my $out = Imager->new( xsize => $source->getwidth() + 2 * $border, ysize => $source->getheight() + 2 * $border, bits => $source->bits, channels => $source->getchannels, ); $out->box( filled => 1, color => $color ); $out->paste( left => $border, top => $border, img => $source, ); return $out; }
#443322 で塗りつぶした画像を add (加算) します。
# 実際のコードでは、色の値に若干のランダム性を持たせています。

先の枠の色を #ffffff (真白) にしてしまうと、(#ffffff には何を足しても変わらないので) 枠に色がつきません。
my $fill = Imager::Fill->new( solid => '#443322', combine => 'add' ); $img->box( fill => $fill );
日付を加えます。

$img = add_date( $img, $date ); sub add_date { my ( $img, $date ) = @_; my $color = Imager::Color->new('#ffaa33'); my $ttfont = Imager::Font->new( file => '7barPBd.TTF', ); my $size = int( $img->getwidth * 0.04 ); $img->align_string( font => $ttfont, text => $date, x => int( $img->getwidth - $size * 1.5 ), y => int( $img->getheight - $size * 1.5 ), halign => 'right', valign => 'bottom', size => $size, color => $color, aa => 1, ); return $img; }
フォントは バイクと車用ステッカー 原画ダウンロード - とろ庵(とろあん) さんの SEVENBAR bold を使用させていただきました。
ノイズを被せます。

$img->filter( type => 'noise', amount => 7 );
最後に JPEG で書き出して、完成です。

$img->write( file => "result.jpg", type => 'jpeg' );
トラックバック - http://d.hatena.ne.jp/sfujiwara/20070924/1190645783
リンク元
- 2862 http://labs.topicmaker.com/~fujiwara/s.html
- 98 http://reader.livedoor.com/reader/
- 50 http://so-net.search.goo.ne.jp/so-net/web.jsp?MT=昭和の写真ジェネレータ&from=SO-NET&PT=SO-NET
- 41 http://d.hatena.ne.jp/nitoyon/20071004/showa_photo_as3
- 34 http://search.goo.ne.jp/web.jsp?MT=昭和の写真ジェネレータ&from=hotword_top&PT=hotword_top
- 29 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GFRC_jaJP208JP208&q=RCPT+TO:+<h.rbl.jp!rlytest>+ok
- 27 http://www.google.com/reader/view/
- 24 http://d.hatena.ne.jp/nitoyon/
- 23 http://search.goo.ne.jp/web.jsp?from=keyweek_chumoku&PT=keyweek_chumoku&MT=昭和の写真ジェネレータ
- 17 http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla:ja:official&hs=T1Q&q=alter+table+auto+increment&btnG=検索&lr=lang_ja
