import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; public class WaterMark { /** * 圖片水印處理 * @param srcImgPath 原圖片路徑 * @param outImgPath 水印後打出路徑 * @param watermarkStr 水印內容 */ public void mark(String srcImgPath, String outImgPath, String watermarkStr) { try { //讀取原圖片信息 File srcImgFile = new File(srcImgPath); Image srcImg = ImageIO.read(srcImgFile); //獲取原圖的高度和寬度 int srcImgWidth = srcImg.getWidth(null); int srcImgHeight = srcImg.getHeight(null); //加水印 BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight,BufferedImage.TYPE_INT_RGB); Graphics2D g = bufImg.createGraphics(); g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null); //設置水印樣式 Font font = new Font("Courier New", Font.PLAIN, 12); g.setFont(font); int x = srcImgWidth - getWatermarkLength(watermarkStr, g) - 3; int y = srcImgHeight - 3; g.drawString(watermarkStr, x, y); g.dispose(); // 輸出圖片 FileOutputStream outImgStream = new FileOutputStream(outImgPath); ImageIO.write(bufImg, "jpg", outImgStream); outImgStream.flush(); outImgStream.close(); } catch (Exception e) { e.printStackTrace(); } } //獲取水印文字總長度 public int getWatermarkLength(String str, Graphics2D g) { return g.getFontMetrics(g.getFont()).charsWidth(str.toCharArray(), 0, str.length()); } public static void main(String[] args) { // 原圖位置, 輸出圖片位置, 水印文字 new WaterMark().mark(args[0], args[1], args[2]); } }