Javaで画像に透かし(ウォーターマーク)を追加する方法【Graphics2D活用】

はじめに

画像に「透かし(ウォーターマーク)」を追加することで、著作権の保護やブランド強調が可能になります。

Javaでは、BufferedImageGraphics2D を使うことで簡単に透かしを描画できます。本記事では、テキスト透かし画像透かしの2つの方法を実践コード付きで紹介します。


開発環境

  • Java 8 以上
  • 標準ライブラリのみで実装可能
  • 画像形式:JPEG / PNG / BMP など

1. テキスト透かしの追加方法

コード例

public BufferedImage addTextWatermark(String text, BufferedImage sourceImage) {
    BufferedImage watermarked = new BufferedImage(
        sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_INT_RGB
    );

    Graphics2D g2d = watermarked.createGraphics();
    g2d.drawImage(sourceImage, 0, 0, null);

    AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
    g2d.setComposite(alpha);
    g2d.setColor(Color.WHITE);
    g2d.setFont(new Font("Arial", Font.BOLD, 36));

    int x = sourceImage.getWidth() - 250;
    int y = sourceImage.getHeight() - 30;
    g2d.drawString(text, x, y);

    g2d.dispose();
    return watermarked;
}

解説

  • AlphaComposite を使って透明度を指定
  • テキスト位置は右下に配置(画像サイズに応じて調整可能)

2. 画像透かしの追加方法

コード例

public BufferedImage addImageWatermark(BufferedImage watermarkImage, BufferedImage sourceImage) {
    BufferedImage watermarked = new BufferedImage(
        sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_INT_RGB
    );

    Graphics2D g2d = watermarked.createGraphics();
    g2d.drawImage(sourceImage, 0, 0, null);

    AlphaComposite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f);
    g2d.setComposite(alpha);

    int x = (sourceImage.getWidth() - watermarkImage.getWidth()) / 2;
    int y = (sourceImage.getHeight() - watermarkImage.getHeight()) / 2;

    g2d.drawImage(watermarkImage, x, y, null);
    g2d.dispose();
    return watermarked;
}

3. ファイルに保存する処理

ImageIO.write(watermarkedImage, "png", new File("output_watermarked.png"));

4. 実行例(main関数)

public static void main(String[] args) throws IOException {
    BufferedImage original = ImageIO.read(new File("original.jpg"));
    
    WatermarkUtil util = new WatermarkUtil();
    BufferedImage textMarked = util.addTextWatermark("© atnettec.com", original);
    ImageIO.write(textMarked, "jpg", new File("text_watermarked.jpg"));

    BufferedImage logo = ImageIO.read(new File("logo.png"));
    BufferedImage imageMarked = util.addImageWatermark(logo, original);
    ImageIO.write(imageMarked, "jpg", new File("image_watermarked.jpg"));
}

まとめ

  • Graphics2DAlphaComposite を使えば透過処理も簡単
  • テキストも画像も透かしとして活用可能
  • ブログ・EC・SNS向け画像に応用できる
タイトルとURLをコピーしました