单纯自己记录用,想借鉴可以看看,零基础想学习还是绕道而行......
package com.zjky.sewage.infrastructure.util.watermark;
import cn.hutool.http.HttpUtil;
import com.drew.imaging.bmp.BmpMetadataReader;
import com.drew.imaging.gif.GifMetadataReader;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.imaging.png.PngMetadataReader;
import com.drew.imaging.png.PngProcessingException;
import com.drew.imaging.tiff.TiffMetadataReader;
import com.drew.imaging.tiff.TiffProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import com.zjky.infrastructure.util.exception.factory.BusinessExceptionFactory;
import lombok.extern.slf4j.Slf4j;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
/**
* 图片添加文字水印,读取手机相机的图片位置及时间信息
*/
@Slf4j
public class WatermarkUtil {
public static Font createFont(String name, int style, int size){
return new Font(name, style, size);
}
/**
* 图片添加文字水印的方法
* @param fileUrl 源图片网络路径
* @param mark 水印内容
*/
public static InputStream addWaterMark(String fileUrl,Watermark mark) {
final InputStream inputStream = HttpUtil.createGet(fileUrl).execute().bodyStream();
// 读取原图片信息
Image srcImg;//文件转化为图片
try {
srcImg = ImageIO.read(inputStream);
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
throw BusinessExceptionFactory.INSTANCE.create("添加文字水印时,读取文件流异常!");
}
BufferedImage bufImg = doDrawImg(mark.getContext(), mark.getColor(), mark.getPercentage(), srcImg, mark.getFontName());
// 转为inputStream
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ImageIO.write(bufImg, mark.getFileSuffix().getName(), os);
} catch (IOException e) {
e.printStackTrace();
e.printStackTrace();
log.error(e.getMessage(), e);
throw BusinessExceptionFactory.INSTANCE.create("添加文字水印时,写入文件流异常!");
}
return new ByteArrayInputStream(os.toByteArray());
}
/**
* 图片添加文字水印的方法
* @param fileUrl 源图片网络路径
* @param tarImgPath 保存的本地图片路径
* @param mark 水印内容
*/
public static void addWaterMark(String fileUrl, String tarImgPath,Watermark mark) {
FileOutputStream outImgStream =null;
final InputStream inputStream = HttpUtil.createGet(fileUrl).execute().bodyStream();
// 读取原图片信息
Image srcImg;//文件转化为图片
try {
srcImg = ImageIO.read(inputStream);
BufferedImage bufImg = doDrawImg(mark.getContext(), mark.getColor(), mark.getPercentage(), srcImg, mark.getFontName());
outImgStream = new FileOutputStream(tarImgPath);
ImageIO.write(bufImg, mark.getFileSuffix().getName(), outImgStream);
log.info("水印添加完成");
outImgStream.flush();
} catch (IOException e) {
e.printStackTrace();
log.error(e.getMessage(), e);
throw BusinessExceptionFactory.INSTANCE.create("添加文字水印时,读取文件流异常!");
}finally {
try {
if(outImgStream!=null){
outImgStream.close();
}
if (inputStream != null) {
inputStream.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* 图片添加文字水印的方法
* @param srcImgFile 源图片文件
* @param tarImgPath 存放的本地文件
* @param mark 水印内容
*/
public static void addWaterMark(File srcImgFile, String tarImgPath,Watermark mark) {
FileOutputStream outImgStream =null;
try {
// 读取原图片信息
Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
BufferedImage bufImg = doDrawImg(mark.getContext(), mark.getColor(), mark.getPercentage(), srcImg, mark.getFontName());
outImgStream = new FileOutputStream(tarImgPath);