java zxing条形码去掉两边空白,密度调整,固定条形码宽度
项目背景:由于条形码code不固定,生成的条形码密度,宽度不一致,有些条码密度太紧凑,导致扫码,扫不出来。
解决方法:重写zxing源码方法,看源码可以找到leftPadding决定了边距。
/*** @return a byte array of horizontal pixels (0 = white, 1 = black)*/private static BitMatrix renderResult(boolean[] code, int width, int height, int sidesMargin) {int inputWidth = code.length;// Add quiet zone on both sides.int fullWidth = inputWidth + sidesMargin;int outputWidth = Math.max(width, fullWidth);int outputHeight = Math.max(1, height);int multiple = outputWidth / fullWidth;int leftPadding = (outputWidth - (inputWidth * multiple)) / 2;BitMatrix output = new BitMatrix(outputWidth, outputHeight);for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {if (code[inputX]) {output.setRegion(outputX, 0, multiple, outputHeight);}}return output;}
这里只改了Code 128,
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.Writer;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;/*** @author wby* @date 2020/11/2*/
public class CodeBar128Util implements Writer {private static String format = "png";//生成条形码图片类型public static void main(String[] args) throws Exception {getCodeBar("AMB02-0001-OCKSDJ-02", 335, 40);}/*** 生成条码方法** @param content* @param width* @param height* @return* @throws Exception*/public static void getCodeBar(String content, int width, int height) throws Exception {HashMap<EncodeHintType, Comparable> hints = new HashMap<EncodeHintType, Comparable>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");hints.put(EncodeHintType.MARGIN, 3);BitMatrix encode = new CodeBar128Util().encode(content, BarcodeFormat.CODE_128, width, height, hints);BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(encode);ImageIO.write(bufferedImage, "bmp", new FileOutputStream(new File("d://testBarcode_1.bmp")));}public static byte[] getCodeBar(String content) {HashMap<EncodeHintType, Comparable> hints = new HashMap<EncodeHintType, Comparable>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");hints.put(EncodeHintType.MARGIN, 3);ByteArrayOutputStream ot = new ByteArrayOutputStream();try {//设置宽高比例,自己调,这里主要是固定了宽度,高度不一致int width = new Code128Writer().encode(content).length;int height = width / 2;BitMatrix bm = new CodeBar128Util().encode(content, BarcodeFormat.CODE_128, width, height, hints);MatrixToImageWriter.writeToStream(bm, format, ot);} catch (Exception e) {e.printStackTrace();}return ot.toByteArray();}@Overridepublic final BitMatrix encode(String contents, BarcodeFormat format, int width, int height)throws WriterException {return encode(contents, format, width, height, null);}/*** Encode the contents following specified format.* {@code width} and {@code height} are required size. This method may return bigger size* {@code BitMatrix} when specified size is too small. The user can set both {@code width} and* {@code height} to zero to get minimum size barcode. If negative value is set to {@code width}* or {@code height}, {@code IllegalArgumentException} is thrown.*/@Overridepublic BitMatrix encode(String contents,BarcodeFormat format,int width,int height,Map<EncodeHintType, ?> hints) throws WriterException {if (contents.isEmpty()) {throw new IllegalArgumentException("Found empty contents");}if (width < 0 || height < 0) {throw new IllegalArgumentException("Negative size is not allowed. Input: "+ width + 'x' + height);}int sidesMargin = 2;if (hints != null && hints.containsKey(EncodeHintType.MARGIN)) {sidesMargin = Integer.parseInt(hints.get(EncodeHintType.MARGIN).toString());}boolean[] code = new Code128Writer().encode(contents);return renderResult(code, width, height, sidesMargin);}/*** @return a byte array of horizontal pixels (0 = white, 1 = black)*/private static BitMatrix renderResult(boolean[] code, int width, int height, int sidesMargin) {int inputWidth = code.length;int fullWidth = inputWidth;int outputWidth;if (width % inputWidth == 0) {outputWidth = width;}outputWidth = width > inputWidth ? width / inputWidth * inputWidth : (width / inputWidth + 1) * inputWidth;int outputHeight = Math.max(1, height);int multiple = outputWidth / fullWidth;int leftPadding = sidesMargin;BitMatrix output = new BitMatrix(outputWidth + 2 * sidesMargin, outputHeight);for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {if (code[inputX]) {output.setRegion(outputX, 0, multiple, outputHeight);}}return output;}
}
java zxing条形码去掉两边空白,密度调整,固定条形码宽度相关推荐
- Zxing 生成二维码和条形码去掉白边
源码下载: https://github.com/AndroidZmm123/ZxingApplication 需求:根据输入内容,生成条形码或者二维码. 我们大多数会选择Zxing.因为jar包较小 ...
- python去掉两边空格_Python模拟删除字符串两边的空白
目标: 1.使用string模块的whitespace 2.删除左边.右边以及两边的空白 代码如下: [root@localhost python]# cat rmspace.py #!/usr/bi ...
- 基于zxing生成与解析二维码、条形码
基于zxing(https://github.com/zxing/zxing)与maven,针对二维码(包括带图片的二维码).条形码进行了简单的封装,以便在项目中更好的利用. ZXing是一个开源Ja ...
- Java zxing生成vcard二维码名片
一)背景 最近想做个vcard个人名片的二维码,从网上查了相关在线生成二维码功能,也能实现功能.但自己因为想用java的方式来实现,网上最多的案例都是依赖zxing jar实现,但由于要生成统一的vc ...
- zxing白边java_ZXing生成无白边条形码
参考连接中的代码作了简化,StrToBrCode.class直接用 package de.safetytaxfree.tuishuibaoshangmiprinter.Printer; import ...
- html 网页两边空白,windows7系统打开网页两边空白怎么办
在windows7系统中,很多用户都喜欢使用自带的ie浏览器来浏览网页,然而有时候在打开网页的时候,发现两边出现空白,该如何解决呢,本教程就给大家介绍一下windows7系统打开网页两边空白的详细操作 ...
- Python Matplotlib 柱状图 改变柱子两边空白区域宽度
加入这两行代码(相当于改变x坐标从几到几),N表示有几个柱子 x_num = np.arange(N) plt.xlim(min(x_num)-0.5,max(x_num)+0.5) 前后对比图: 之 ...
- java 网页空白_win8系统运行Java程序网页会出现空白的解决方法
我们在操作win8系统电脑的时候,常常会遇到win8系统运行Java程序网页会出现空白的问题.那么出现win8系统运行Java程序网页会出现空白的问题该怎么解决呢?很多对电脑不太熟悉的小伙伴不知道wi ...
- java对象序列化去掉字段_使用序列化查找对象中的脏字段
java对象序列化去掉字段 假设您正在开发一个将对象自动保存到数据库中的框架. 您需要检测两次保存之间所做的更改,以便仅保存已修改的字段. 如何检测脏场. 最简单的方法是遍历原始数据和当前数据,并分别 ...
最新文章
- matlab安装教程补充
- idea在Mybatis的xml里面写sql时,表名、字段、报红问题的解决方法
- 【HDOJ】1239 Calling Extraterrestrial Intelligence Again
- 系统快捷键被谁占用? 查看工具
- 量子遗传算法原理与MATLAB仿真程序
- (二)html5中的属性
- win2008R2管理员密码修改文档
- 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍
- 一年前端开发工程师简历_一年前,我开始学习编码,专注于前端开发。
- c#+web与php,将Web服务客户端从c#转换为php
- 课程设计第一次实验总结
- qt android 网络编程实例,【9】QT网络编程
- java炫酷龙卷风源码,龙卷风's Blog
- 小学听课计算机笔记范文,小学听课笔记 范文大全
- 最新服务器主流硬盘,主流服务器的raid(磁盘阵列)配置
- java加密方案:Virbox Protector Java版-全新保护方案
- 量化投资 | 统计套利策略
- 相似图像识别算法是什么,机器图像识别常用算法
- centos 7.5 安装桌面环境及报错
- CSS实现强制换行的解决方法