Java

您所在的位置:网站首页 cad在图上添加文字 Java

Java

2024-01-28 09:06| 来源: 网络整理| 查看: 265

二话不说,直接上代码, 具体注释, 代码里简单的有写: 可以根据我后面给的两张效果图进行测试;

demo测试方法: 直接将如下代码复制到一个java文件中运行main方法即可;

注意: 代码中标记'todo'的地方自行修改;

import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @use 利用Java代码给图片添加文字(透明图调低点,也可以当做水印) */ @Slf4j public class WaterMarkUtils { /** * 编辑图片,往指定位置添加文字 * @param srcImgPath :源图片路径 * @param targetImgPath :保存图片路径 * @param list :文字集合 */ public static void writeImage(String srcImgPath, String targetImgPath, List list) { FileOutputStream outImgStream = null; try { //读取原图片信息 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); for (ImageDTO imgDTO : list) { g.setColor(imgDTO.getColor()); //根据图片的背景设置水印颜色 g.setFont(imgDTO.getFont()); //设置字体 g.drawString(imgDTO.getText(), imgDTO.getX(), imgDTO.getY()); //画出水印 } g.dispose(); // 输出图片 outImgStream = new FileOutputStream(targetImgPath); ImageIO.write(bufImg, "jpg", outImgStream); } catch (Exception e) { log.error("==== 系统异常::{} ====",e); }finally { try { if (null != outImgStream){ outImgStream.flush(); outImgStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 创建ImageDTO, 每一个对象,代表在该图片中要插入的一段文字内容: * @param text : 文本内容; * @param color : 字体颜色(前三位)和透明度(第4位,值越小,越透明); * @param font : 字体的样式和字体大小; * @param x : 当前字体在该图片位置的横坐标; * @param y : 当前字体在该图片位置的纵坐标; * @return */ private static ImageDTO createImageDTO(String text,Color color,Font font,int x,int y){ ImageDTO imageDTO = new ImageDTO(); imageDTO.setText(text); imageDTO.setColor(color); imageDTO.setFont(font); imageDTO.setX(x); imageDTO.setY(y); return imageDTO; } /** * main方法: * @param args */ public static void main(String[] args) { //=========================================自行发挥================================ //todo 自己真实的地址:(如果项目中使用的阿里云,则自行改造'writeImage'方法,接受流对象就好了); String srcImgPath="C:\\Users\\mm\\Desktop\\test.png"; //源图片地址 String tarImgPath="C:\\Users\\mm\\Desktop\\test1.png"; //目标图片的地址 //============================================================================== //获取数据集合; ArrayList list = new ArrayList(); list.add(createImageDTO("2020/02/02/15:30:30",new Color(102,102,102,100),new Font("微软雅黑", Font.PLAIN, 24), 78, 160)); list.add(createImageDTO("账户名称",new Color(102,102,102,100),new Font("微软雅黑", Font.PLAIN, 24), 178, 226)); list.add(createImageDTO("1111111",new Color(102,102,102,100),new Font("微软雅黑", Font.PLAIN, 24), 710, 226)); list.add(createImageDTO("上海银行",new Color(102,102,102,100),new Font("微软雅黑", Font.PLAIN, 24), 178, 290)); list.add(createImageDTO("这是用途",new Color(102,102,102,100),new Font("微软雅黑", Font.PLAIN, 24), 710, 290)); list.add(createImageDTO("¥50.00",new Color(255,59,48),new Font("微软雅黑", Font.PLAIN, 36), 270, 366)); //操作图片: WaterMarkUtils.writeImage(srcImgPath, tarImgPath, list); //这句代码,自己项目中可以不用加,在这里防止main方法报错的; System.exit(0); } } /** * 存放文本内容的类 */ @Setter @Getter class ImageDTO{ //文字内容 private String text; //字体颜色和透明度 private Color color; //字体和大小 private Font font; //所在图片的x坐标 private int x; //所在图片的y坐标 private int y; }

执行前的效果:

 执行后的效果:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3