package com.pit.common.utils.file;
import com.aspose.cad.internal.A.B;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.charset.StandardCharsets;
public class ImageUtils {
public InputStream addWatermark(InputStream inputStream,
String bidName, String center,
String time, String wather, String workSiteName,
String createUser, String jianli, String content,
String sgdw, String jidw
) throws Exception {
try {
//也可以传入文件目录地址读取
//File file = new File("目标文件路径");
//Image srcImg = ImageIO.read(file);
//把文件转换成图片
Image srcImg = ImageIO.read(inputStream);
//获取图片的宽和高
int srcImgwidth = srcImg.getWidth(null);
int srcImgheight = srcImg.getHeight(null);
Font font = new Font("微软雅黑", Font.PLAIN, (int)(srcImgheight * 0.02));
//画水印需要一个画板 创建一个画板
BufferedImage buffImg = new BufferedImage(srcImgwidth, srcImgheight, BufferedImage.TYPE_INT_RGB);
//创建一个2D的图像
Graphics2D g = buffImg.createGraphics();
g.setFont(font);
//画出来
g.drawImage(srcImg, 0, 0, srcImgwidth, srcImgheight, null);
//设置水印的背景颜色
//x坐标 等于 从左往右 横轴 的左边距百分比 width / 100 * 2
//y坐标 等于 从上往下 竖轴 的上边距百分比 width / 100 * 55
int x = (int)(srcImgwidth * 0.02);
int y = (int)(srcImgheight * 0.55);
Color color = new Color(35,98,185, 153);
g.setColor(color);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.4F));
g.fillRect(x ,y , (int)(srcImgwidth * 0.5), (int)(srcImgheight * 0.05));
//设置水印的字体
x = (int)(srcImgwidth * 0.24);
y = (int)(srcImgheight * 0.58);
color = new Color(255,255,255);
g = buffImg.createGraphics();
g.setFont(font);
g.setColor(color);
g.drawString("工程记录", x, y);
//中间背景颜色
x = (int)(srcImgwidth * 0.02);
y = (int)(srcImgheight * 0.6);
color = new Color(144,150,150);
g = buffImg.createGraphics();
g.setColor(color);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.4F));
g.fillRect(x ,y , (int)(srcImgwidth * 0.5), (int)(srcImgheight * 0.3));
//内容信息
Graphics2D fontG = buffImg.createGraphics();
Color fontColor = new Color(0,0,0);
fontG.setColor(fontColor);
fontG.setFont(font);
String info = "标 段:" + " "+ bidName;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.63);
fontG.drawString(info, x, y);
info = "里 程:" + " "+ center;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.66);
fontG.drawString(info, x, y);
info = "拍摄时间:" + " "+ time;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.71);
fontG.drawString(info, x, y);
info = "天 气:" + " "+ wather;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.74);
fontG.drawString(info, x, y);
info = "工 点:" + " "+ workSiteName;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.77);
fontG.drawString(info, x, y);
info = "报 验 人:" + " "+ createUser;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.82);
fontG.drawString(info, x, y);
info = "监 理:" + " "+ jianli;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.85);
fontG.drawString(info, x, y);
info = "报验内容:" + " "+ content;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.88);
fontG.drawString(info, x, y);
//施工单位,监理单位 背景
x = (int)(srcImgwidth * 0.02);
y = (int)(srcImgheight * 0.9);
color = new Color(35,98,185, 153);
g = buffImg.createGraphics();
g.setColor(color);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.4F));
g.fillRect(x ,y , (int)(srcImgwidth * 0.5), (int)(srcImgheight * 0.09));
color = new Color(255,255,255);
info = "施工单位:" + " "+ sgdw;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.94);
fontG.setColor(color);
fontG.drawString(info, x, y);
info = "监理单位:" + " "+ jidw;
x = (int)(srcImgwidth * 0.03);
y = (int)(srcImgheight * 0.97);
fontG.setColor(color);
fontG.drawString(info, x, y);
//释放画板的资源
g.dispose();
System.out.println("水印添加完成!");
//水印文件输出到本地目录
// FileOutputStream outputStream = new FileOutputStream(outImagePath);
//创建新的图片
// ImageIO.write(buffImg, "jpg", outputStream);
//刷新流
// outputStream.flush();
//关闭流
// outputStream.close();
//输出成流
//创建一个ByteArrayOutputStream
ByteArrayOutputStream os = new ByteArrayOutputStream();
//把BufferedImage写入ByteArrayOutputStream
ImageIO.write(buffImg, "jpg", os);
//ByteArrayOutputStream转成InputStream
InputStream input = new ByteArrayInputStream(os.toByteArray());
return input;
} catch (IOException e) {
e.printStackTrace();
throw new Exception("添加水印失败");
}
}
/**
* 获取水印的坐标
*
* @param watermarkContent 水印内容
* @param g 2d图像
* @return 水印的长度
*/
public int getwaterMarkLength(String watermarkContent, Graphics2D g) {
return g.getFontMetrics(g.getFont()).charsWidth(watermarkContent.toCharArray(), 0, watermarkContent.length());
}
public static void main(String[] args) throws Exception {
// String srcImgPath = "C:\\Users\\Administrator\\Desktop\\图片\\v2-c16c4e757314dd2455f58dd5528eca9e_b.jpg";
// String tarImgPath = "C:\\Users\\Administrator\\Desktop\\图片\\xiong-out.jpg";
// ImageUtils aa = new ImageUtils();
// aa.addWatermark(srcImgPath, tarImgPath);
// String srcImgPath = "https:\\img0.baidu.com\\it\\u=3212920999,1827079299&fm=26&fmt=auto&gp=0.jpg";
// String tarImgPath = "C:\\Users\\Administrator\\Desktop\\图片\\xiong-out.jpg";
// ImageUtils aa = new ImageUtils();
// aa.addWatermark(srcImgPath, tarImgPath);
}
}
JAVA 图片Graphics2D添加水印
最新推荐文章于 2024-08-24 05:10:58 发布