画像をリサイズして表示したいことって多々あると思う。
例えばそんな大きい画像を表示しないところでは横320pxやら、サムネイル一覧やら。
けどそれを作ろうとするとなると、基本的にはローカルの画像をごにょごにょしないといけない。
で、ごにょごにょしてheaderを弄って表示するって感じで中々に面倒だし、
ec2を使っているとなるとそもそも静的ファイルはs3に置いてあるからローカルに保存するとか手間だし、
何よりも生成したリサイズ画像を消さないとec2のサーバ容量を圧迫してしまうとか。
けどnginxのimage_filterを使う事で、そんな煩わしい事もないし、
むしろPHPでごにょごにょすることがなく簡単ということで、今日はそのお話をば。
■image_filterを使うためのvirtualhostの設定
nginxが既にインストールされている想定で。
されてなかったら下記のコマンドで一発。
yum -y install nginxvirtual.confとして/etc/nginx/conf/conf.d/virtual.confに作成。
image_filterの公式のドキュメント的なのはこちら
# # A virtual host using mix of IP-, name-, and port-based configuration # server { listen 80; server_name www.hogehoge.com; root /var/www/html/; location ~* ^/resize/(\d+)/(.*)$ { proxy_pass http://hogehoge.s3.amazonaws.com; set $width $1; set $file $2; image_filter_buffer 5M; image_filter resize $width -; image_filter_jpeg_quality 100; rewrite ^ /img_folder/$file break; } location ~* ^/crop/(\d+)/(.*)$ { proxy_pass http://hogehoge.s3.amazonaws.com; set $width $1; set $file $2; image_filter_buffer 5M; image_filter crop $width $width; image_filter_jpeg_quality 100; rewrite ^ /img_folder/$file break; } location / { proxy_set_header Host $host; proxy_set_header X-RealIP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080; } }ってな感じでやれば大丈夫。
proxy_passが簡単に使えるのがnginxの特徴で、s3上にあるファイルを引っ張ってくる的な。
www.hogehoge.com/resize/リサイズしたい横幅/ファイル名にアクセスすれば、image_filterを通してs3上のimage_folder上のファイルを表示するっていう感じ。
ただ注意するべき点としては、image_filterを通したい画像よりも、大きくresizeしたい場合は適用されないっていう。
つまり元画像が640pxだった場合に、960pxにしたいと思っても出来ないっていう。
じゃあ拡大するにはどうするのかっていうことだけど、ngx_small_lightを使うとしたいことは出来るよ的な。
それについての記事はこちら
image_filterはec2のnginxリポジトリの標準機能として入っているので、
簡単に画像リサイズサーバーを作りたいっていうときにはimage_filterはかなり楽なのでオススメ的な。
0 件のコメント:
コメントを投稿