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修改图片内容的更多相关文章

  1. 用JAVA中BufferedImage画出漂亮的验证码点击变化

    如果我们想用JAVA中BufferedImage画出漂亮的验证码点击变化怎么实现呢,类似这样: 点击变化,以下是实现过程,直接上代码: 首先前台:<i><img style=&quo ...

  2. java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码

    java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码 作者:Vashon package com.ywx.batchrename; import java.io.File; import ...

  3. Hadoop使用Java进行文件修改删除操作

    Hadoop使用Java进行文件修改删除操作 学习了:http://blog.csdn.net/menghuannvxia/article/details/44651061 学习了:http://bl ...

  4. java中BufferedImage类的用法

    1. BufferedImage是Image的一个子类,Image和BufferedImage的主要作用就是将一副图片加载到内存中. BufferedImage生成的图片在内存里有一个图像缓冲区,利用 ...

  5. Java 添加、修改、读取、复制、删除Excel批注

    本文介绍通过Java程序来操作Excel批注的方法.操作内容包括批注添加(添加批注文本.背景色.字体.自适应等).修改.读取(文本.图片).复制.删除等. 工具:Free Spire.XLS for ...

  6. Java实现批量修改文件名称

    import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** ...

  7. java使用BufferedImage和Graphics实现图片合成

    package com.igoxin.weixin.custom; import java.awt.Graphics; import java.awt.image.BufferedImage; imp ...

  8. Java反射之修改常量值

    1. 通过反射修改常量的值 package com.blueStarWei.invoke; import java.lang.reflect.Field; public class ModifyFin ...

  9. Java实现动态修改Jar包内文件内容

    import java.io.*; import java.util.Enumeration; import java.util.LinkedList; import java.util.List; ...

随机推荐

  1. Mask_RCNN学习记录(matterport版本)

    资源链接 Mask R-CNN论文 matterport版本的GitHub 基于Keras和Tensorflow GitHub上还有Facebook的官方实现版本:Detectron maskrcnn ...

  2. 2018-2019-2 20165325《网络对抗技术》Exp0 Kali安装 Week1

    2018-2019-2 20165325<网络对抗技术>Exp0 Kali安装 Week1 一.安装kali VMware上学期已经有了,主要是下载Kali-Linux-2019.1-vm ...

  3. Python简单基础小程序

    1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i, ...

  4. Discuz x 转码要记

    Discuz 开源项目仅保留了 UTF8 编码版本,要从GBK版本升级,须进行编码转换. 转换主要执行以下步骤: 关闭网站,做好源文件备份: 导出数据库,在MySQL中生成Self-Contained ...

  5. 射线法(1190 - Sleepwalking )

    题目:http://lightoj.com/volume_showproblem.php?problem=1190 参考链接:https://blog.csdn.net/gkingzheng/arti ...

  6. ebe

    ebe1 Email:kefu007@vip.qq.com 89600 VSA 软件解调和矢量信号分析的综合工具 Aspen Plus大型通用流程模拟系统 AutoAdvance Baccarat-P ...

  7. 使用JMeter的HTTP代理服务器录制app脚本

    1.添加一个线程组 2.添加一个HTTP代理服务器 3.设置手机网络连接 4.手机安装证书 a.进入jmeter安装目录,在bin目录下找到ApacheJMeterTemporaryRootCA.cr ...

  8. 论文阅读笔记四十九:ScratchDet: Training Single-Shot Object Detectors from Scratch(CVPR2019)

    论文原址:https://arxiv.org/abs/1810.08425 github:https://github.com/KimSoybean/ScratchDet 摘要 当前较为流行的检测算法 ...

  9. 金山WPS一面

    昨天下午在武汉面了一场服务端开发工程师吧,结果还未通知,是校招的, 大体上题目如下: 先自我介绍 然后是聊了一些笔试上的情况 问了spring的的作用以及优势 http的状态,三次握手四次挥手 gc的 ...

  10. mybatis和hibernate中的懒加载

    概念:所谓懒加载就是延时加载,延迟加载.什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载.至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减 ...