java给图片加水印工具类

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class WaterMarkUtils {

    public static final String MARK_TEXT = "你好世界!" ;
    // 设置字体
    public static final String FONT_NAME = "宋体" ;
	// 字体大小
    public static final int FONT_SIZE = 50 ;
    // 字体样式,是否加粗,斜体
    public static final int FONT_STYPE = Font.TRUETYPE_FONT ;
    // 字体颜色
    public static final Color FONT_COLOR = Color.white ;

    public static final int X = 20 ;
    public static final int Y = 1400 ;
	// 透明度 1为不透明,越小透明度越高 0.3F
    public static float ALPHA = 1F ;

    public static String watermark(CommonsMultipartFile file, String uploadPath, String realUploadPath,String dateTime,String markInfoName) {
        // TODO Auto-generated method stub

        String logoFileName = file.getOriginalFilename() ;
        OutputStream os = null ;
        try {
            Image image2 = ImageIO.read(file.getInputStream()) ;

            int width = image2.getWidth(null) ;
            int height = image2.getHeight(null) ;

            BufferedImage bufferImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB) ;
            // 创建Graphics2D对象,用在底图对象上绘图
            Graphics2D g = bufferImage.createGraphics() ;
            g.drawImage(image2, 0, 0, width, height, null) ;

            g.setFont(new Font(FONT_NAME,FONT_STYPE,FONT_SIZE));
            g.setColor(FONT_COLOR) ;

            int width1 = FONT_SIZE*getTextLength(dateTime) ;
            int height1 = FONT_SIZE ;

            int widthDiff = width-width1 ;
            int heightDiff = height-height1 ;

            int x = X ;
            int y = Y ;

            if(x>widthDiff) {
                x = widthDiff ;
            }

            if(y>heightDiff) {
                y=heightDiff ;
            }

            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ALPHA));
			// 根据图片的长和宽来固定水印的位置
            g.drawString(dateTime, X, height-100) ;
            g.drawString(markInfoName , X, height-45) ;
            g.dispose() ;
			// g.drawString 向图片上写水印内容,可以多次写入不同的内容,记得调整内容在图片中的位置

            os = new FileOutputStream(realUploadPath+"/"+logoFileName) ;
            JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os) ;
            en.encode(bufferImage) ;

        } catch(Exception e) {
            e.printStackTrace() ;
        } finally {
            if(os!=null) {
                try {
                    os.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        return uploadPath;
    }

    public static int getTextLength(String text) {
        int length = text.length();

        for(int i=0; i<text.length(); i++) {
            String s = String.valueOf(text.charAt(i)) ;
            if(s.getBytes().length>1) {
                length++ ;
            }
        }

        length = length%2==0?length/2:length/2+1 ;
        return length ;
    }

}

注: 水印使用的字体服务器上也要安装了相关字体,要不然打出来的中文都是乱码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值