|
|
|
|
|
package com.nmgs.util;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 处理水印类
|
|
|
|
|
|
*/
|
|
|
|
|
|
import java.awt.*;
|
|
|
|
|
|
import java.awt.image.BufferedImage;
|
|
|
|
|
|
import java.io.*;
|
|
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
|
|
import java.nio.file.Files;
|
|
|
|
|
|
import java.nio.file.Path;
|
|
|
|
|
|
import java.nio.file.Paths;
|
|
|
|
|
|
import java.util.Base64;
|
|
|
|
|
|
import java.util.Properties;
|
|
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
|
|
|
@Async
|
|
|
|
|
|
public class ImageUtils {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 添加水印文字
|
|
|
|
|
|
* @param imageBase64
|
|
|
|
|
|
* @param text 水印文字
|
|
|
|
|
|
* @return
|
|
|
|
|
|
* @throws Exception
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static String addImageWaterMark(String imageBase64, String text, String fileName) throws Exception {
|
|
|
|
|
|
String retStr="";
|
|
|
|
|
|
Properties props = System.getProperties();
|
|
|
|
|
|
String os = props.getProperty("os.name").toLowerCase();
|
|
|
|
|
|
String fileAddress = PropertiesUtil.getValue("fileAddress");
|
|
|
|
|
|
InputStream inputStream = null;
|
|
|
|
|
|
try {
|
|
|
|
|
|
byte[] imageBytes = Base64.getDecoder().decode(imageBase64);
|
|
|
|
|
|
// 构造 BufferedImage 对象
|
|
|
|
|
|
inputStream = new ByteArrayInputStream(imageBytes);
|
|
|
|
|
|
BufferedImage bufferedImage1 = ImageIO.read(inputStream);
|
|
|
|
|
|
if (PubTools.isEmpty(bufferedImage1)) {
|
|
|
|
|
|
/* // 创建文件
|
|
|
|
|
|
if (os.startsWith("win")) {
|
|
|
|
|
|
fileAddress=fileAddress.replaceALl("/","\\");
|
|
|
|
|
|
}
|
|
|
|
|
|
File file = new File(, fileName); // 指定上传位置
|
|
|
|
|
|
// 保存文件
|
|
|
|
|
|
org.apache.commons.io.FileUtils.writeByteArrayToFile(file, imageBytes);*/
|
|
|
|
|
|
return imageBase64;
|
|
|
|
|
|
}
|
|
|
|
|
|
int w1 = bufferedImage1.getWidth();
|
|
|
|
|
|
int h1 = bufferedImage1.getHeight();
|
|
|
|
|
|
// 生成新图片
|
|
|
|
|
|
BufferedImage destImage = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_RGB);
|
|
|
|
|
|
Graphics2D graphics2D = destImage.createGraphics();
|
|
|
|
|
|
destImage = graphics2D.getDeviceConfiguration().createCompatibleImage(w1, h1, Transparency.TRANSLUCENT);
|
|
|
|
|
|
graphics2D = destImage.createGraphics();
|
|
|
|
|
|
Color color1Init = graphics2D.getColor();
|
|
|
|
|
|
//添加白底
|
|
|
|
|
|
graphics2D.setColor(Color.white);
|
|
|
|
|
|
graphics2D.fillRect(0, 0, w1, h1);
|
|
|
|
|
|
|
|
|
|
|
|
//写入字体
|
|
|
|
|
|
Font font = new Font("宋体", Font.PLAIN,30);
|
|
|
|
|
|
int markWidth = font.getSize() * text.length();// 字体长度
|
|
|
|
|
|
if(markWidth >w1){
|
|
|
|
|
|
markWidth=markWidth/2;
|
|
|
|
|
|
}
|
|
|
|
|
|
int markHeight = font.getSize();// 字体高度
|
|
|
|
|
|
// Color color = new Color(213, 216, 217,128);//写入的颜色
|
|
|
|
|
|
graphics2D.setColor(Color.gray);
|
|
|
|
|
|
graphics2D.setFont(font);
|
|
|
|
|
|
//设置透明度
|
|
|
|
|
|
// graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
|
|
|
|
|
|
//设置选择度
|
|
|
|
|
|
//graphics2D.rotate(10,50,50);
|
|
|
|
|
|
graphics2D.drawString(text, w1/8, h1/2);
|
|
|
|
|
|
//合成图片
|
|
|
|
|
|
//graphics2D.drawImage(backImage, w1/2-50, h1-50-16,null);
|
|
|
|
|
|
graphics2D.dispose();
|
|
|
|
|
|
float alpha=0.7f;//透明度,0-1 ,1完全透明
|
|
|
|
|
|
Color color = new Color(184, 186, 187);//写入的颜色
|
|
|
|
|
|
Color textColorA = new Color(((float) color.getRed())/255, ((float)color.getGreen())/255, ((float)color.getBlue())/255, alpha);
|
|
|
|
|
|
int outRGB = textColorA.getRGB();
|
|
|
|
|
|
//将水印添加到图片中去
|
|
|
|
|
|
for (int i = 0; i < w1; i++) {
|
|
|
|
|
|
for (int j = 0; j < h1; j++) {
|
|
|
|
|
|
int rgb = destImage .getRGB(i, j);
|
|
|
|
|
|
//如果是文字水印的像素点的话
|
|
|
|
|
|
if (new Color(rgb).getRGB() != Color.white.getRGB()) {
|
|
|
|
|
|
bufferedImage1 .setRGB(i, j, rgb);
|
|
|
|
|
|
int bufImgRGB = destImage.getRGB(i, j);
|
|
|
|
|
|
if (bufImgRGB>>24==0) {
|
|
|
|
|
|
//如果该像素点为全透明,则使用半透明的像素点
|
|
|
|
|
|
bufferedImage1 .setRGB(i, j, outRGB);
|
|
|
|
|
|
}else {
|
|
|
|
|
|
//将原图像素点合成到半透明文字上去
|
|
|
|
|
|
Color backColor = new Color(bufImgRGB);
|
|
|
|
|
|
float red = textColorA.getRed()*alpha+backColor.getRed()*(1-alpha);
|
|
|
|
|
|
float green = textColorA.getGreen()*alpha+backColor.getGreen()*(1-alpha);
|
|
|
|
|
|
float blue = textColorA.getBlue()*alpha+backColor.getBlue()*(1-alpha);
|
|
|
|
|
|
|
|
|
|
|
|
Color colorCompose = new Color(red/255, green/255, blue/255, 1f);
|
|
|
|
|
|
bufferedImage1 .setRGB(i, j, colorCompose.getRGB());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 将 BufferedImage 转换为 byte 数组
|
|
|
|
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
|
|
ImageIO.write(bufferedImage1, "jpg", baos);
|
|
|
|
|
|
byte[] watermarkedImageBytes = baos.toByteArray();
|
|
|
|
|
|
retStr = Base64.getEncoder().encodeToString(watermarkedImageBytes);
|
|
|
|
|
|
/* // 创建文件
|
|
|
|
|
|
File file = new File(PropertiesUtil.getValue("fileAddress"), fileName); // 指定上传位置
|
|
|
|
|
|
// 保存文件
|
|
|
|
|
|
org.apache.commons.io.FileUtils.writeByteArrayToFile(file, watermarkedImageBytes);*/
|
|
|
|
|
|
return retStr;
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
return retStr="";
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
inputStream.close();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 添加文字水印
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param waterMarkText 水印文字内容
|
|
|
|
|
|
* @param fontName 字体名称, 如:宋体
|
|
|
|
|
|
* @param fontStyle 字体样式,如:粗体和斜体(Font.BOLD|Font.ITALIC)
|
|
|
|
|
|
* @param color 字体颜色
|
|
|
|
|
|
* @param degree 水印文字顺时针旋转角度,允许为负数。
|
|
|
|
|
|
* @param alpha 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)
|
|
|
|
|
|
* @param isOpen 是否添加水印
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static String watermarkAdd(String base64, String waterMarkText, String fontName, int fontStyle, Color color, Integer degree,
|
|
|
|
|
|
float alpha, String isOpen) {
|
|
|
|
|
|
byte[] image=base64.getBytes(StandardCharsets.UTF_8);
|
|
|
|
|
|
if (null == image)
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
|
|
if ("off".equalsIgnoreCase(isOpen))
|
|
|
|
|
|
return base64;
|
|
|
|
|
|
if(PubTools.isNull(fontName)){
|
|
|
|
|
|
fontName="宋体";
|
|
|
|
|
|
}
|
|
|
|
|
|
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
|
|
|
|
|
|
// 得到源图片
|
|
|
|
|
|
Image srcImg = ImageIO.read(new ByteArrayInputStream(image));
|
|
|
|
|
|
int imgWidth = srcImg.getWidth(null);
|
|
|
|
|
|
int imgHeight = srcImg.getHeight(null);
|
|
|
|
|
|
|
|
|
|
|
|
BufferedImage buffImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);
|
|
|
|
|
|
// 得到画笔对象
|
|
|
|
|
|
Graphics2D g = buffImg.createGraphics();
|
|
|
|
|
|
// 设置对线段的锯齿状边缘处理
|
|
|
|
|
|
// g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
|
|
|
|
|
|
g.drawImage(srcImg.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), 0, 0, null);
|
|
|
|
|
|
// 设置水印文字大小
|
|
|
|
|
|
int fontSize = buffImg.getWidth(null) / 300 * 8;
|
|
|
|
|
|
// 设置水印Font
|
|
|
|
|
|
g.setFont(new Font(fontName,fontStyle,fontSize));
|
|
|
|
|
|
// 设置水印文字颜色
|
|
|
|
|
|
g.setColor(color);
|
|
|
|
|
|
// 设置水印旋转
|
|
|
|
|
|
if (null != degree) {
|
|
|
|
|
|
g.rotate(Math.toRadians(degree), (double) imgWidth / 2, (double) imgHeight / 2);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 设置水印文字透明度
|
|
|
|
|
|
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
|
|
|
|
|
|
|
|
|
|
|
|
// 计算水印文字的大小
|
|
|
|
|
|
int textWidth = fontSize * getLength(waterMarkText);
|
|
|
|
|
|
int textHeight = fontSize;
|
|
|
|
|
|
// 循环打印多个水印
|
|
|
|
|
|
for (int y = -imgHeight; y < imgHeight * 2; y += textHeight + fontSize * 3) {
|
|
|
|
|
|
for (int x = 0; x < imgWidth * 2; x += textWidth + fontSize * 3 / 2) {
|
|
|
|
|
|
// 笫一参数-> 设置的内容,后面两个参数->文字在图片上的坐标位置
|
|
|
|
|
|
g.drawString(waterMarkText, x, y);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
|
|
|
|
|
|
// 释放资源
|
|
|
|
|
|
g.dispose();
|
|
|
|
|
|
// 生成图片
|
|
|
|
|
|
ImageIO.write(buffImg, "JPG", os);
|
|
|
|
|
|
return os.toByteArray().toString();
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取字符长度,一个汉字作为 1 个字符, 一个英文字母作为 0.5 个字符
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param text
|
|
|
|
|
|
* @return 字符长度,如:text="中文",返回 2;text="test",返回 2;text="中文ABC",返回 4.
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static int getLength(String text) {
|
|
|
|
|
|
int textLength = text.length();
|
|
|
|
|
|
int length = textLength;
|
|
|
|
|
|
for (int i = 0; i < textLength; i++) {
|
|
|
|
|
|
if (String.valueOf(text.charAt(i)).getBytes().length > 1) {
|
|
|
|
|
|
length++;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return (length % 2 == 0) ? length / 2 : length / 2 + 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void deleteImage(String imagePath) {
|
|
|
|
|
|
Path path = Paths.get(imagePath);
|
|
|
|
|
|
try {
|
|
|
|
|
|
// 检查文件是否存在
|
|
|
|
|
|
if (Files.exists(path)) {
|
|
|
|
|
|
// 删除文件
|
|
|
|
|
|
Files.delete(path);
|
|
|
|
|
|
System.out.println("图片删除成功:" + imagePath);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
System.out.println("图片不存在:" + imagePath);
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
System.out.println("删除图片失败:" + imagePath);
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
String basae64="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
|
|
|
|
|
|
String encode = ImageUtils.addImageWaterMark(basae64, "内蒙古积分", "测试.png");
|
|
|
|
|
|
System.out.print(encode);
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|