Java使用BufferedImage修改图片内容
1.修改图片的架包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
1.1 修i该图片工具类
package com.mz.usps.common.util; import com.mz.usps.common.domain.LableMessage; import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList; /**
* @author sjl
* @date 2019-04-23 17:58
*/
public class PngAlterUtil {
/**
* 添加字体的属性设置
*/
private Font font = new Font("微软雅黑", Font.BOLD, 18);
private Graphics2D g = null;
private int fontsize = 0;
private int x = 0;
private int y = 0;
private static int z = 0; /**
* 导入本地图片到缓冲区
*/
public BufferedImage loadImageLocal(String imgName) {
BufferedImage read = null;
try {
read = ImageIO.read(new File(imgName));
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
return read;
} /**
* 生成图片到本地
*/
public void writeImageLocal(String newImage, BufferedImage img) {
if (newImage != null && img != null) {
try {
File outputfile = new File(newImage);
ImageIO.write(img, "jpg", outputfile);
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
}
} /**
* 修改图片,返回修改后的图片缓冲区
*/
public BufferedImage modifyImage(BufferedImage img, BufferedImage imgs1, BufferedImage imgs2, BufferedImage imgs3, Object content, int x, int y, int j) {
try { if (j >= z) {
font = new Font("微软雅黑", Font.BOLD, 22);
} int w = img.getWidth();
int h = img.getHeight();
g = img.createGraphics(); //遮盖原本模板
if (imgs1 != null) {
ImageObserver observer = new Checkbox();
g.drawImage(imgs1, 5, 270, observer);
}
if (imgs2 != null) {
ImageObserver observer = new Checkbox();
g.drawImage(imgs2, 5, 470, observer);
}
if (imgs3 != null) {
ImageObserver observer = new Checkbox();
g.drawImage(imgs3, 205, 1010, observer);
} //设置背景颜色
g.setBackground(Color.WHITE);
//设置字体颜色
g.setColor(Color.BLACK);
if (this.font != null) {
g.setFont(this.font);
}
//验证输出位置的纵坐标和横坐标
if (x >= h || y >= w) {
this.x = h - this.fontsize + 2;
this.y = w;
} else {
this.x = x;
this.y = y;
}
if (content != null) {
g.drawString(content.toString(), this.x, this.y);
}
g.dispose();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
return img;
} /**
*
* @param path 原图路径
* @param message 封装了向原图中插入的信息
*/
public static void panAlter(String path, LableMessage message) {
//获取单号条形码
BufferedImage barCodeImage = BarCodesUtil.generateFile(message.getLabelNo()); //遮盖层存放路径
String coverPath1 = "/usr/local/tomcatusps/apache-tomcat-8.5.15/Root/overspread/coverLayer1.png";
String coverPath2 = "/usr/local/tomcatusps/apache-tomcat-8.5.15/Root/overspread/coverLayer2.png";
PngAlterUtil pngAlterUtil = new PngAlterUtil();
//导入本地图片到缓冲区
BufferedImage img1 = pngAlterUtil.loadImageLocal(path);
BufferedImage img2 = pngAlterUtil.loadImageLocal(coverPath1);
BufferedImage img3 = pngAlterUtil.loadImageLocal(coverPath2);
//修改图片,返回修改后的图片缓冲区
BufferedImage image = pngAlterUtil.modifyImage(img1, img2, img3, barCodeImage, "", 0, 0, 0); ArrayList<String> list = new ArrayList();
list.add("From:" + message.getSendName());
//发件地址1判断
if (message.getSendAddress1().length() > 30) {
String sb1 = message.getSendAddress1().substring(0, 30);
int i1 = sb1.lastIndexOf(" ");
list.add(message.getSendAddress1().substring(0, i1));
list.add(message.getSendAddress1().substring(i1 + 1));
} else {
list.add(message.getReceiveAddress1());
}
//发件地址2判断
if (message.getSendAddress2() != null) {
if (message.getSendAddress2().length() > 30) {
String sb2 = message.getSendAddress2().substring(0, 30);
int i2 = sb2.lastIndexOf(" ");
list.add(message.getSendAddress2().substring(0, i2));
list.add(message.getSendAddress2().substring(i2 + 1));
} else {
list.add(message.getSendAddress2());
}
}
list.add(message.getSendCity() + " " + message.getSendProvCode() + " " + message.getSendPostcode());
list.add(message.getSendMobile()); //添加收货人信息
list.add("Ship To:" + message.getReceiveName());
//判断收货人地址1
if (message.getReceiveAddress1().length() > 30) {
String sb3 = message.getReceiveAddress1().substring(0, 30);
int i3 = sb3.lastIndexOf(" ");
list.add(message.getReceiveAddress1().substring(0, i3));
list.add(message.getReceiveAddress1().substring(i3 + 1));
} else {
list.add(message.getReceiveAddress1());
}
//判断收获人地址2
if (message.getReceiveAddress2() != null) {
if (message.getReceiveAddress2().length() > 30) {
String sb4 = message.getReceiveAddress2().substring(0, 30);
int i4 = sb4.lastIndexOf(" ");
list.add(message.getReceiveAddress2().substring(0, i4));
list.add(message.getReceiveAddress2().substring(i4 + 1));
} else {
list.add(message.getReceiveAddress2());
}
}
list.add(message.getReceiveCity() + " " + message.getReceivePrvoCode() + " " + message.getSendPostcode());
list.add(message.getReceiveMobile()); int y = 340; for (int j = 0; j < list.size(); j++) {
if (j == 0) {
image = pngAlterUtil.modifyImage(image, null, null, null, list.get(j), 45, y, j);
} else if (list.get(j).contains("Ship To:")) {
z = j;
y = y + 40;
image = pngAlterUtil.modifyImage(image, null, null, null, list.get(j), 5, y, j);
} else {
image = pngAlterUtil.modifyImage(image, null, null, null, list.get(j), 96, y, j);
}
y = y + 20;
}
//将生成的新lable保存到本地
pngAlterUtil.writeImageLocal(path, image);
}
}
2.根据单号生成条形码工具类架包
<!--条形码工具-->
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j-light</artifactId>
<version>2.0</version>
</dependency>
2.1 根据单号生成条形码工具类
package com.mz.usps.common.util; import org.apache.commons.lang3.StringUtils;
import org.krysalis.barcode4j.BarcodeDimension;
import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*; /**
* 生成条形码工具
*
* @author sjl
* @date 2019-04-25 10:44
*/
public class BarCodesUtil { /**
* 生成文件
*
* @param msg
* @param
* @return
*/
public static BufferedImage generateFile(String msg) {
// String path = "C:\\usr\\local\\tomcatusps\\apache-tomcat-8.5.15\\Root\\label\\barCode.png";
String path = "/usr/local/tomcatusps/apache-tomcat-8.5.15/Root/overspread/barCode.png"; BufferedImage read = null;
File file = new File(path);
try {
//将条形码存入本地
generate(msg, new FileOutputStream(file));
read = ImageIO.read(file);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
e.printStackTrace();
} return read;
} /**
* 生成字节
*
* @param msg
* @return
*/
public static byte[] generate(String msg) {
ByteArrayOutputStream ous = new ByteArrayOutputStream();
generate(msg, ous);
return ous.toByteArray();
} /**
* 生成到流
*
* @param msg
* @param ous
*/
public static void generate(String msg, OutputStream ous) {
if (StringUtils.isEmpty(msg) || ous == null) {
return;
} // Code39Bean bean = new Code39Bean();
Code128Bean bean = new Code128Bean(); // 精细度
final int dpi = 30;
// module宽度
final double moduleWidth = UnitConv.in2mm(0.5f / dpi); // 配置对象
bean.setModuleWidth(3);
// bean.setWideFactor(5);
bean.setBarHeight(20);
bean.setFontSize(20);
bean.doQuietZone(false); String format = "image/png"; BarcodeDimension barcodeDimension = bean.calcDimensions(msg); try { // 输出到流
BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,
BufferedImage.TYPE_BYTE_BINARY, false, 0); // 生成条形码
bean.generateBarcode(canvas, msg); // 结束绘制
canvas.finish();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Java使用BufferedImage修改图片内容的更多相关文章
- 用JAVA中BufferedImage画出漂亮的验证码点击变化
如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...
- java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码
java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码 作者:Vashon package com.ywx.batchrename; import java.io.File; import ...
- Hadoop使用Java进行文件修改删除操作
Hadoop使用Java进行文件修改删除操作 学习了:http://blog.csdn.net/menghuannvxia/article/details/44651061 学习了:http://bl ...
- java中BufferedImage类的用法
1. BufferedImage是Image的一个子类,Image和BufferedImage的主要作用就是将一副图片加载到内存中. BufferedImage生成的图片在内存里有一个图像缓冲区,利用 ...
- Java 添加、修改、读取、复制、删除Excel批注
本文介绍通过Java程序来操作Excel批注的方法.操作内容包括批注添加(添加批注文本.背景色.字体.自适应等).修改.读取(文本.图片).复制.删除等. 工具:Free Spire.XLS for ...
- Java实现批量修改文件名称
import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** ...
- java使用BufferedImage和Graphics实现图片合成
package com.igoxin.weixin.custom; import java.awt.Graphics; import java.awt.image.BufferedImage; imp ...
- Java反射之修改常量值
1. 通过反射修改常量的值 package com.blueStarWei.invoke; import java.lang.reflect.Field; public class ModifyFin ...
- Java实现动态修改Jar包内文件内容
import java.io.*; import java.util.Enumeration; import java.util.LinkedList; import java.util.List; ...
随机推荐
- cv::Mat类之type成员
CV_8UC3 -->16 CV_8UC3 表示存储元素的数据类型为 8bit unsigned char 类型,通道数C = 3 为什么OpenCV中type为CV_8UC3的图像 输出其ty ...
- The base and high address of the custom IP are not correctly reflected in xparameters.h in SDK
This issue has been observed in 2015.3, 2015.4, and 2015.4.1 builds of Vivado. When you create and a ...
- ffmpeg错误:Invalid UE golomb code
解决方案在github https://github.com/FFmpeg/FFmpeg/commit/c51c08e0e70c186971385bdbb225f69edd4e3375 问题简要描述为 ...
- web.xml 各版本的 Schema 头部声明
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "- ...
- vmware克隆虚拟机后无法联网
1.基础知识: 就算是克隆的系统,但是由于物理地址改变了,导致rules文件进行了重新绑定 网卡会从eth0变成eth1(逐渐+1),而且mac地址和uuid也会有变化. 2.解决方法: 2.1编辑e ...
- JS中定义对象和集合
在js中定义对象: 方式一: var obj = {}; obj['a']=1; obj['b']=2; 方式二: var obj=new Object(); obj.a=1; obj.b=2; 在j ...
- 防XSS攻击解决方法
1.web.xml文件中新增filter配置 <!-- URL请求参数字符过滤或合法性校验 --> <filter> <filter-name>XssFilter& ...
- 主席树+树链剖分——南昌邀请赛Distance on the tree
学了差不多一星期的主席树+树链剖分,再来看这题发现其实是个板子题 一开始想复杂了,以为要用类似求树上第k大的树上差分思想来解决这道题,但其实树链上<=k的元素个数其实直接可以用树链剖分来求 具体 ...
- Linux基础-远程管理
shutdown 选项 时间 关机/重新启动 -r 重新启动 不指定选项和参数,1分钟后关闭电脑 重启必须加-r 示例: shutdown -r now now表示现在 shut ...
- linux常用命令及使用技巧(二)
ls显示指定工作目录下的内容,同windows中的dir命令 pwd命令显示当前工作目录 date命令,显示或修改系统时间与日期 passwd命令,设置用户密码 su命令改变用户身份 clear命令, ...