はじめに
画像に「透かし(ウォーターマーク)」を追加することで、著作権の保護やブランド強調が可能になります。
Javaでは、BufferedImage
と Graphics2D
を使うことで簡単に透かしを描画できます。本記事では、テキスト透かしと画像透かしの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"));
}
まとめ
Graphics2D
のAlphaComposite
を使えば透過処理も簡単- テキストも画像も透かしとして活用可能
- ブログ・EC・SNS向け画像に応用できる