经验分享

JAVA 实现上传图片添加水印(详细版)

水印的工具类:  import javax.imageio.ImageIO;import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Rende

水印的工具类:

 
 
import javax.imageio.ImageIO;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
 
/**
 * 定义文字加水印
 */
public class ImageWatermarkUtils {
 
    // 水印字体
    private static final Font FONT = new Font("微软雅黑", Font.PLAIN, 14);
 
    // 透明度
    private static final AlphaComposite COMPOSITE = AlphaComposite
            .getInstance(AlphaComposite.SRC_OVER, 0.6f);
 
    // 水印之间的间隔
    private static final int X_MOVE = 150;
 
    // 水印之间的间隔
    private static final int Y_MOVE = 200;
 
    /**
     * 打水印(文字)
     *
     * @param srcImgPath       源文件地址
     * @param font             字体
     * @param markContentColor 水印颜色
     * @param waterMarkContent 水印内容
     * @param outImgPath       输出文件的地址
     */
    public static void markWithContent(String srcImgPath, Font font, Color markContentColor,
                                       String waterMarkContent,
                                       String outImgPath) {
        FileOutputStream fos = null;
        try {
            // 读取原图片信息
            File srcFile = new File(srcImgPath);
            File outFile = new File(outImgPath);
            BufferedImage srcImg = ImageIO.read(srcFile);
 
            // 图片宽、高
            int imgWidth = srcImg.getWidth();
            int imgHeight = srcImg.getHeight();
 
            // 图片缓存
            BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);
 
            // 创建绘图工具
            Graphics2D graphics = bufImg.createGraphics();
 
            // 画入原始图像
            graphics.drawImage(srcImg, 0, 0, imgWidth, imgHeight, null);
 
            // 设置水印颜色
            graphics.setColor(markContentColor);
 
            // 设置水印透明度
            graphics.setComposite(COMPOSITE);
 
            // 设置倾斜角度
            graphics.rotate(Math.toRadians(-35), (double) bufImg.getWidth() / 2,
                    (double) bufImg.getHeight() / 2);
 
            // 设置水印字体
            graphics.setFont(font);
 
            // 消除java.awt.Font字体的锯齿
            graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 
            int xCoordinate = -imgWidth / 2, yCoordinate;
            // 字体长度
            int markW

原创不易,完成人机校验,阅读全文

相关推荐