package com.vcim.common.utils;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
/**
* @author liufeihu
* @date 6/9/21 1:02 PM
*/
public class ImageUtils {
private static final String WATERMARKCONTENT = "你好菜啊~~~~"; // 水印内容
/**
* @param srcImgPath
* 源图片路径
*/
public static byte[] addWaterMark(String srcImgPath,String waterMarkContent) {
try {
Font font = new Font("微软雅黑", Font.BOLD, 15); // 水印字体
Color markContentColor = new Color(255, 0, 0); // 水印图片色彩以及透明度
int degree = 330;
// 读取原图片信息
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);
g.setColor(markContentColor); // 根据图片的背景设置水印颜色
g.setFont(font); // 设置字体
// 设置水印的坐标
int x = srcImgWidth - 2 * getWatermarkLength(waterMarkContent, g);
int y = srcImgHeight - 2 * getWatermarkLength(waterMarkContent, g);
// g.rotate(Math.toRadians(degree), (double) srcImgWidth / 2, (double) srcImgHeight / 2);//能旋转角度
float high = (float) (700 / 3.7);
for (int i = 0; i < 2; i++) {
if (i % 2 == 0) {
g.drawString(waterMarkContent, 0.0f - 500, i * high); // 画出水印
} else {
g.drawString(waterMarkContent, 0.0f, i * high); // 画出水印
}
}
float highs = (float) (600 / 3.7);
for (int i = 0; i < 2; i++) {
if (i % 2 == 0) {
g.drawString(waterMarkContent, 0.0f - 500, i * highs); // 画出水印
} else {
g.drawString(waterMarkContent, 0.0f, i * highs); // 画出水印
}
}
g.dispose();
//把图片转换为字节
// ByteArrayOutputStream bot = new ByteArrayOutputStream();
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bot);
// encoder.encode(bufImg);
// System.out.println("图片完成添加水印图片");
// 输出图片
FileOutputStream outImgStream = new FileOutputStream("d:/test1.jpg");
ImageIO.write(bufImg, "jpg", outImgStream);
System.out.println("添加水印完成");
outImgStream.flush();
outImgStream.close();
return null;
// return bot.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static int getWatermarkLength(String waterMarkContent, Graphics2D g) {
return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
}
public static void main(String[] args) {
String srcImgPath = "d:/PRODUCT001.png"; // 源图片地址
String tarImgPath = "d:/test1.jpg"; // 待存储的地址
addWaterMark(srcImgPath,WATERMARKCONTENT);
}
}
java图片增加水印
最新推荐文章于 2024-09-06 19:01:55 发布