Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで画像に透かし(ウォーターマーク)を追加する方法を解説

画像に透かし(ウォーターマーク)を入れることは、著作権保護やブランド表示のために非常に有効な手段です。本記事では、Javaの標準ライブラリであるAWT(Abstract Window Toolkit)とImageIOクラスを使用して、指定した画像に「Hello」という半透明のテキスト透かしを描画し、その結果を新しいファイルとして保存する方法を詳しく解説します。外部ライブラリを追加することなく、数行のコードで実装できる点が大きな特徴です。

処理の流れ

  1. 画像の読み込み:ImageIO.read()メソッドで元画像をBufferedImageとして読み込みます。
  2. 出力用画像の生成:元画像と同じ幅・高さを持つBufferedImageを新しく作成します。
  3. Graphicsオブジェクトの取得:getGraphics()でグラフィックスコンテキストを取得し、drawImage()で元画像を描画します。
  4. フォントと色の設定:Arialフォント(サイズ45)と半透明の色(アルファ値30)を指定します。
  5. 透かしの描画:drawString()メソッドで文字列を画像上に描きます。
  6. 保存:dispose()でリソースを解放し、ImageIO.write()でJPEG形式として書き出します。

サンプルコード

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class WaterMarkExample {
    public static void main(String[] args) throws IOException {
        // 画像ファイルを読み込む
        File file = new File("D:\\Images\\test1.jpg");
        BufferedImage img = ImageIO.read(file);

        // 出力用の空の画像を作成
        int height = img.getHeight();
        int width = img.getWidth();
        BufferedImage res = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        // Graphicsオブジェクトを取得し、元画像を描画
        Graphics graphics = res.getGraphics();
        graphics.drawImage(img, 0, 0, null);

        // 透かし用のフォントを設定
        Font font = new Font("Arial", Font.PLAIN, 45);
        graphics.setFont(font);
        graphics.setColor(new Color(255, 150, 200, 30));

        // 画像に透かし文字列を描画
        graphics.drawString("Hello", width / 7, height / 5);

        // リソースを解放
        graphics.dispose();

        // 結果の画像を書き出す
        file = new File("D:\\Images\\watermark.jpg");
        ImageIO.write(res, "jpg", file);
    }
}

コードのポイント

  • new Color(255, 150, 200, 30):4番目の引数はアルファ値(不透明度)です。値が小さいほど透け感が強まり、元の画像を邪魔しない自然な透かしになります。
  • width / 7 と height / 5:描画位置を画像サイズに対する相対的な比率で指定しているため、異なる大きさの画像にも柔軟に対応できます。
  • graphics.dispose():使用後は必ずdispose()を呼び出して、OS側のグラフィックリソースを解放しましょう。

入力画像

Javaで画像に透かし(ウォーターマーク)を追加する方法を解説

出力画像

Javaで画像に透かし(ウォーターマーク)を追加する方法を解説

このように、Javaの標準ライブラリだけで簡単に透かしを追加できます。フォントの種類やサイズ、色、描画位置を調整すれば、より視認性の高い実用的なウォーターマークを実現できるでしょう。また、複数箇所に繰り返し描画したり、ロゴ画像を重ねたりする応用も可能です。

  1. JavaのOpenCVライブラリでカラー画像をグレースケールに変換する方法

    カラー画像をグレースケールに変換する基本OpenCVのImgprocクラスが提供するcvtColor()メソッドを使うと、画像の色空間を別の色空間へ変換できます。このメソッドは以下の3つのパラメータを受け取ります。src – 変換元の画像を表すMatオブジェクト(ソース)dst – 変換結果を格納するMatオブジェクト(出力先)code – 変換後の色空間を指定する整数値(カラーコード)カラー画像をグレースケールに変換する場合は、第3パラメータにImgproc.COLOR_RGB2GRAYを指定します。このコードはRGB形式の画像をグレースケール(白黒の濃淡表現)へ変換することを意味しています

  2. JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法

    OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列