- 浏览: 5103176 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
最近用到一维条码、二维条码,看了几种方案,选了ZXing,因为即支持一维条码、二维条码的生成,也支持条码的识读。
结果在应用的过程中遇到了问题,有的单位使用的是针式打印机,一式多份的,打印出来的一维条码识别率很低。这是个致命的问题,必须要解决。仔细阅读了一维条码的原理、码制,发现一个说法,条码的宽单元与窄单元的比例(W/N Ratio)可以为2至3。看一下打印结果,ZXing打印出来的好像是2,如果调整到3,是不是能提高识别率呢?
可是,把ZXing的接口反复看了几遍,没有找到能改的地方,觉得这是一个比较重要的参数,ZXing不提供有点不厚道呀!
只好改源码了,阅读了一下源码,发现ZXing确实不支持调整宽窄单元比,因为2是硬编码在代码里的,为了不影响原有的代码,我就自已加一种码制吧,起个名叫Code393,表示宽窄单元比为3的Code39码。把我的代码完整贴一下,改动并不多,加了一点儿注释。还要修改BarcodeFormat、MultiFormatWriter,很简单,这里不做介绍了。
调整好了,打印一试,识别率比较令人满意。
另,此项修改,不知对条码识别有没有影响,本人没有检查识读部分的代码。
本人原创,转载请保留原文地址:http://wallimn.iteye.com/blog/2111896
结果在应用的过程中遇到了问题,有的单位使用的是针式打印机,一式多份的,打印出来的一维条码识别率很低。这是个致命的问题,必须要解决。仔细阅读了一维条码的原理、码制,发现一个说法,条码的宽单元与窄单元的比例(W/N Ratio)可以为2至3。看一下打印结果,ZXing打印出来的好像是2,如果调整到3,是不是能提高识别率呢?
可是,把ZXing的接口反复看了几遍,没有找到能改的地方,觉得这是一个比较重要的参数,ZXing不提供有点不厚道呀!
只好改源码了,阅读了一下源码,发现ZXing确实不支持调整宽窄单元比,因为2是硬编码在代码里的,为了不影响原有的代码,我就自已加一种码制吧,起个名叫Code393,表示宽窄单元比为3的Code39码。把我的代码完整贴一下,改动并不多,加了一点儿注释。还要修改BarcodeFormat、MultiFormatWriter,很简单,这里不做介绍了。
/* * Copyright 2010 ZXing authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.zxing.oned; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import java.util.Map; /** * This object renders a CODE39 code as a {@link BitMatrix}. * 宽单元这宽度为窄单元的2到3倍,这是我自定义的3倍的单元比 * * @author erik.barbara@gmail.com (Erik Barbara), Modified by wallimn@sohu.com */ public final class Code393Writer extends OneDimensionalCodeWriter { @Override public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType,?> hints) throws WriterException { if (format != BarcodeFormat.CODE_39_3) { throw new IllegalArgumentException("Can only encode CODE_39, but got " + format); } return super.encode(contents, format, width, height, hints); } @Override public boolean[] encode(String contents) { int length = contents.length(); if (length > 80) { throw new IllegalArgumentException( "Requested contents should be less than 80 digits long, but got " + length); } int[] widths = new int[9]; //int codeWidth = 24 + 1 + length; int codeWidth = 1 + length;//每个字符间的空 for (int i = 0; i < length; i++) { int indexInString = Code39Reader.ALPHABET_STRING.indexOf(contents.charAt(i)); if (indexInString < 0) { throw new IllegalArgumentException("Bad contents: " + contents); } toIntArray(Code39Reader.CHARACTER_ENCODINGS[indexInString], widths); for (int width : widths) { codeWidth += width; } } toIntArray(Code39Reader.CHARACTER_ENCODINGS[39], widths); //起始码、结束码占的宽度 for (int width : widths) { codeWidth += width; } for (int width : widths) { codeWidth += width; } boolean[] result = new boolean[codeWidth]; int pos = appendPattern(result, 0, widths, true); int[] narrowWhite = {1}; pos += appendPattern(result, pos, narrowWhite, false); //append next character to bytematrix for(int i = length-1; i >= 0; i--) { int indexInString = Code39Reader.ALPHABET_STRING.indexOf(contents.charAt(i)); toIntArray(Code39Reader.CHARACTER_ENCODINGS[indexInString], widths); pos += appendPattern(result, pos, widths, true); pos += appendPattern(result, pos, narrowWhite, false); } toIntArray(Code39Reader.CHARACTER_ENCODINGS[39], widths); pos += appendPattern(result, pos, widths, true); return result; } private static void toIntArray(int a, int[] toReturn) { for (int i = 0; i < 9; i++) { int temp = a & (1 << i); toReturn[i] = temp == 0 ? 1 : 3;//原来此处为3 } } }
调整好了,打印一试,识别率比较令人满意。
另,此项修改,不知对条码识别有没有影响,本人没有检查识读部分的代码。
本人原创,转载请保留原文地址:http://wallimn.iteye.com/blog/2111896
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18185编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2128部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3172两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 16431.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7562一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1174我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3209做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1089写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3906大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2296一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7312我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2693@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2007转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3042用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1685element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9715示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6186申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5200最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5238springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10295微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
基于ZXing 最新的2.3版本进行的简化,界面进行了简单的自定义,使用了滚动的扫描线,竖屏,基本上只要拿去调整一下样式就可以在自己的项目里用了,最重要的是扫码还特别的快? Q:请问在哪里可以买得到叫呢? A:...
google zxing读取、生成一维码、二维码图片 google zxing java 一维码 条形码 二维码 生成 读取
开发环境VS2015/C#,使用OpenCvSharp加ZXing实现条形码的定位和识别。
用code_128做的简单一维码生成 zxing源码可在https://github.com/zxing/zxing查询
一维码生成BarcodeLib.dll 和 zxing.dll生成条形码和二维码 ,条码应用,与大家分享。BarcodeLib.dll 一维条码库支持以下条码格式。 ZXing (ZebraCrossing)是一个开源的,支持多种格式的条形码图像处理库, 。使用该...
Android zxing2.3 + core.jar 注:只保留二维码扫描部分,也就是说此乃精简版 友情提示:使用高版本zxing生成的二维码,用低版本的zxing扫描貌似不识别。zxing2.3对于点版本的Android系统貌似不支持(暂且知道2.2 ...
ZXing-1.5.zip 条形码 二维 一维
详细注释!二维码条码扫描源码,使用Zxing core2.3
zxing2.3 for android的一个Demo包,有自己修改的一部分代码,删除了share,book,cip包,其他保留,按自己需要更改,2.3较于2.1,2.2有改动,所以可以方便点,即下即用
Zxing生成一维码二维码图片 Service服务
zxing提供二维一维码扫描,本项目是android项目代码
C#生成条形码 可设置高度、宽度等 非常简单 代码好
ZXing.NET C#使用ZXing识别二维码,条形码 包含VS2008至2017版本
android上使用ZXing识别条形码和二维码,代码简单易懂,相信能帮助读者迅速掌握相关的开发
这是编译完后所有的zxing的jar包,包含2.3 3.0 3.1.1及部分javadoc source.
第一步:截取图片中的条形码并另存为缩略图。 第二步:识别缩略图中的条形码。
基于zxing一维码二维码解析,可将内容转换为string
Zxing
Android的zxing2.3原项目代码,非精简。
修改了github上zxing 的 python 实现,可以利用python语言调用jar包实现图片中的二维码条形码识别。