ngx_small_lightで動的サムネイル生成 #yapcasia2012
TRANSCRIPT
ngx_small_lightで動的サムネイル生成
Tatsuhiko [email protected] YAPC::Asia 2012
自己紹介• 久保 達彦 (bokko)• @cubicdaiya• インフラ兼ソフトウェアエンジニア@pixiv
ngx_small_light
•画像サムネイル生成サーバ with Nginx• サムネイルの生成パターンをURLで指定• mod_small_lightのNginx移植版
URLのパスを変えるだけでいろんなサムネイルを生成♪
/tank.jpg /small_light(p=medium)/tank.jpg /small_light(p=small)/tank.jpg
オリジナル Mサイズ Sサイズ
設定ファイルserver { listen 80; server_name localhost;
# small_lightを有効にする small_light on; # 変換パターンを定義 small_light_pattern_define medium dw=500,dh=500; small_light_pattern_define small dw=120,dh=120;
location ~ small_light[^/]*/(.+)$ { set $file $1; rewrite ^ /$file; }}
ngx_small_lightのディレクティブ
small_light
• ngx_small_lightのon/off(デフォルトはoff)small_light on;
small_light_pattern_define
•サムネイル生成パターンに名前を付ける
以下の二つのURLは同じレスポンスを返す
small_light_pattern_define medium dw=500,dh=500;
dw, dh:生成するサムネイルの幅と高さ
http://localhost/small_light(dw=500,dh=500)/tank.jpghttp;//localhost/small_light(p=medium)/tank.jpg
small_light_material_dir
• 合成用素材ディレクトリ
• embedicon, ix, iyと組み合わせて使う
•
small_light_material_dir /var/materials;
tank.jpgの座標(0, 0)に/var/materials/icon.jpgを埋め込む
http://localhost/small_light(embedicon=icon.jpg,ix=0,iy=0)/tank.jpg
最後に
•ngx_small_lightはgithubで公開中
•
https://github.com/cubicdaiya/ngx_small_light
おまけ
僕がngx_small_lightをつくったわけ
去年、某社の技術資料を見た僕の当時の上司が、
サムネイルの動的生成か。よし、うちもやろう!
半年後
そういや、そんなことあったなぁ
一から書くの面倒だし、mod_small_lightってのを使ってみよう
二日後
原型留めてないくらい改造したmod_small_lightを見せに行く
うちでも使えるように改造したよ~♪
bokko++
原型留めてないくらい改造したmod_small_lightを見て・・・
♪ ♪♪
・・・
Nginxでやらない?
Nginxでやらない?
Nginxでやらない?
mod_small_lightに約350行の巨大パッチあてた次の日に
Nginxでやらない?
mod_small_lightに約350行の巨大パッチあてた次の日に
Nginxでやらない?
mod_small_lightに約350行の巨大パッチあてた次の日に
大事なことなので三回言いました
mod_small_lightにあてた約350行の巨大パッチ
mod_small_lightにあてた約350行の巨大パッチ
パッチってレベルじゃねぇ!!!
そもそもの前提として
•当時既にpixiv内のHTTPサーバは大体ApacheからNginxに置き換わってた
結局、
Apacheでいきましょう
そうするか
@kamipo@cubicdaiya
半年後
ngx_small_lightリリース
当時の弊社のNginxマスターからの反応
ngx_small_lightはこうして生まれました!
一部誇張されていますが概ね事実です!!!
ご静聴ありがとございました