首页 > 其他分享 >一个给图片添加水印的工具类

一个给图片添加水印的工具类

时间:2022-09-03 13:33:06浏览次数:51  
标签:String int 水印 添加 static param new 图片

package dsfa.jsnd.helper;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author Hunag Zicai
 * @date 2022/9/2 16:46
 * @desc
 **/
public class ImgHelper {

    /**
     * 字体名称
     */
    private static final String FONR_NAME = "微软雅黑";
    /**
     * 字体大小
     */
    private static final int FONT_SIZE = 40;
    /**
     * 常规字体
     */
    private static final int FONT_PLAIN =  Font.PLAIN;
    /**
     * 加粗字体
     */
    private static final int FONT_BOLD = Font.BOLD;
    /**
     * 倾斜字体
     */
    private static final int FONT_ITALIC = Font.ITALIC;


    /**
     * 给照片添加水印
     *
     * @param imagePath 待添加水印的地址
     * @param toPath 要存储的路径
     * @param imgName 添加水印后的图片名称
     * @param content 水印内容
     * @throws IOException
     */
    public static void fillWatermark(String imagePath,String toPath,String imgName,String content) throws IOException {
        File f = new File(imagePath);
        if (!f.exists()) {
            throw new RuntimeException("图片不存在");
        }
        Image img = ImageIO.read(f);
        int width = img.getWidth(null);
        int height = img.getHeight(null);


        BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //创建画笔
        Graphics2D g = bufImg.createGraphics();
        //srcImg 为上面获取到的原始图片的图片对象
        g.drawImage(img, 0, 0, width, height, null);
        //根据图片的背景设置水印颜色
        g.setColor(new Color(255, 255, 255, 128));
        //设置字体  画笔字体样式为微软雅黑,加粗,文字大小为60pt
        g.setFont(new Font(FONR_NAME, FONT_ITALIC, FONT_SIZE));
        //设置水印的坐标
        int x = (width - getWatermarkLength(content, g)) / 2;
        int y = height / 2;
        //画出水印 第一个参数是水印内容,第二个参数是x轴坐标,第三个参数是y轴坐标
        g.drawString(content, x, y);
        g.dispose();

        String imgSuffix = "jpg";
        String[] imgArr = imgName.split("\\.");
        if (imgArr.length > 1) {
            imgSuffix = imgArr[1];
        }
        //待存储的地址
        String absPath=toPath+File.separator+ imgName;
        // 输出图片
        FileOutputStream outImgStream = new FileOutputStream(absPath);
        ImageIO.write(bufImg, imgSuffix, outImgStream);
        outImgStream.flush();
        outImgStream.close();
    }


    /**
     * 获取水印文字的长度
     *
     * @param waterMarkContent
     * @param g
     * @return
     */
    private static int getWatermarkLength(String waterMarkContent, Graphics2D g) {
        return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
    }


}

标签:String,int,水印,添加,static,param,new,图片
From: https://www.cnblogs.com/BoBo-B0BO/p/16652452.html

相关文章