java 為圖片添加水印(文字水印、圖片水印)


1.情景展示

  如何使用java實現為圖片添加水印的功能?

2.導包

  使用jdk即可實現功能開發,不需要額外的jar包。

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

3.添加圖片水印

/**
 * 為圖片添加水印
 * @explain 文字水印、圖片水印
 * @author Marydon
 * @creationTime 2020年5月15日上午10:30:01
 * @version 1.0
 * @since
 * @email marydon20170307@163.com
 */
public class Watermark {

    /**
     * 把圖片印刷到圖片上
     * @param pressImg
     *            水印文件
     * @param targetImg
     *            目標文件
     * @param x
     *            x坐標
     * @param y
     *            y坐標
     */
    public final static void pressImage(String pressImg, String targetImg, int x, int y) {
        try {
            // 目標文件
            File _file = new File(targetImg);
            Image src = ImageIO.read(_file);

            int wideth = src.getWidth(null);
            int height = src.getHeight(null);
            BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = image.createGraphics();
            g.drawImage(src, 0, 0, wideth, height, null);

            // 水印文件
            File _filebiao = new File(pressImg);
            Image src_biao = ImageIO.read(_filebiao);
            int weight_biao = src_biao.getWidth(null);
            int height_biao = src_biao.getHeight(null);

            g.drawImage(src_biao, x, y, weight_biao, height_biao, null);

            // 水印結束
            g.dispose();
            FileOutputStream out = new FileOutputStream(targetImg);
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(image);
            out.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4.添加文字水印

/**
 * 打印文字水印圖片
 * @param pressText
 *            文字
 * @param targetImg
 *            目標圖片
 * @param fontName
 *            字體名
 * @param fontStyle
 *            字體樣式
 * @param color
 *            字體顏色
 * @param fontSize
 *            字體大小
 * @param x
 *            偏移量
 * @param y
 *            偏移量
 */
public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color,
		int fontSize, int x, int y) {
	try {
		File _file = new File(targetImg);
		Image src = ImageIO.read(_file);
		int weidth = src.getWidth(null);
		int height = src.getHeight(null);
		BufferedImage image = new BufferedImage(weidth, height, BufferedImage.TYPE_INT_RGB);
		Graphics g = image.createGraphics();
		g.drawImage(src, 0, 0, weidth, height, null);
		g.setColor(color);
		g.setFont(new Font(fontName, fontStyle, fontSize));
		g.drawString(pressText, x, y);
		g.dispose();
		FileOutputStream out = new FileOutputStream(targetImg);
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(image);
		out.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

5.效果展示  

  原圖片

  圖片水印

   將上面的水印添加到原圖片右下角

public static void main(String[] args) {
    String waterMarkImgPath = "C:\\Users\\Marydon\\Desktop\\水印-博客2.png";
    String targetImgPath = "C:\\Users\\Marydon\\Desktop\\TIM圖片20200515162045.jpg";
    pressImage(waterMarkImgPath, targetImgPath, 880, 560);
}  

  文字水印

public static void main(String[] args) {
    pressText("@博人傳", "C:\\Users\\Marydon\\Desktop\\TIM圖片20200515162045.jpg", "宋體", 0, new Color(248, 248, 255), 50, 1100, 570);
}

  說明:

  如上面的效果展示的那樣,要想將水印打印到圖片指定位置,進行動態設置的話,需要:

  第一,原圖片大小;

  第二,水印大小;

  滿足這兩個條件才能將水印打印到圖片的指定位置,也就是可以進行動態位移。 

  其中,圖片水印可以進行動態設置,而文字水印則實現不了,因為我們無法獲取文字水印的大小。

  調試水印輸出位置也是個細致活呀。

  另外,水印的偏移量一般情況下均為正值,圖片左上角為起點0,0,不同於數學上的Y軸,向下偏移用正值表示。

 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM