JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■応用の森 画面から投入された画像を、Java上で縮小する方法について
画像掲示板などで、でっかいファイルサイズの画像を大量に投稿された場合に
表示レスポンスが低下するのを予防するために
サーブレット側で、画像データを縮小してしまうテクニックです。
ここでは、わかりやすいように画像の長辺サイズを320ピクセルに圧縮します。

このプログラムのベースになっているのは、
HTML編 No002:Base64形式の画像データ(jpeg/gif/png)を表示する方法
を流用して、画像圧縮処理を追加しています。

ファイルサイズが大きいJPEG画像をサーバーに送信し、長辺320ピクセルの画像に縮小するサンプル
ファイルサイズが大きいjpeg形式画像ファイルを指定してください。 
注)送信されたデータは、垂れ流しでサーバー側には一切保存していませんのでご安心を。
 
縮小画像表示エリア(表示された画像を保存して、画像ソフトでサイズを確認してみてください。)

 

送信された画像がブラウザに表示されるはずです。
表示された画像を、PCに保存して画像編集ソフトで確認すると
長辺320ピクセルに縮小されているはずです。
以下、サンプルソースの解説です。

view(WebContent/imgconv.html)

フォームを送信すると、結果は同じ画面が表示され、サーバーから縮小されて返却された
画像データ(Base64エンコード形式)を <img>タグにセットしています。

 

コントローラ(src/main/jp/dip/arimodoki/cntl/ImgConv.java)

 

ブラウザから投入された画像データは、マッピングハンドラimgconvert()に渡り、
compress()メソッドで画像圧縮を行った上で、Base64エンコードしてview(HTML)に返却します。

まじめにやる場合は、compress()メソッドは別の汎用クラスに追い出した方がいいと思いますが、
ここでは手抜きして、コントローラクラスのprivateメソッドで実装しています。