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

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■応用の森 Java上で画像を合成する方法について
画面から投入された画像に、ウォーターマーク(透かし)画像を合成するサンプルです。
前述の「No001:Javaによる画像の縮小処理」とほぼ同じですが
画像合成メソッド composition() が追加されています。
ウォーターマーク(透かし)画像はあらかじめ作成しておいて、
画面から送信された画像データに上書き合成を行います。
ファイルサイズが大きいJPEG画像をサーバーに送信し、画像合成を行うサンプル
ファイルサイズが大きいjpeg形式画像ファイルを指定してください。 
注)送信されたデータは、垂れ流しでサーバー側には一切保存していませんのでご安心を。
 
画像表示エリア

 

送信された画像にウォーターマーク画像が合成されてラウザに表示されるはずです。
以下、サンプルソースの解説です。

view(WebContent/imgcomposit.html)

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

 

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

 

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

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

 

■画像を合成する方法について 考察その2
上の方法は、画像そのものをJavaで加工してしまうというある意味ちょっと乱暴な方法ですが、
ここでは、画像の加工は行わない方法を考えてみます。
まず、下の様な感じで透かしを入れてみましたが、どうでしょうか?
画像を加工したのと見た目は変わりません。

ただしこの方法は、ベースのハイビスカスの画像と、透かし画像は別々のファイルです。
2枚の画像を、スタイルシートをうまく調整して重なりあって見えるように
配置を調整しています。
具体的には、このページのソースを見ていただければ一目瞭然です。
ここでのミソは、スタイルシートのposition属性をうまく使うことです。