- 浏览: 5156598 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 18457编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2374部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3375两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 17611.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7652一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1226我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3255做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1143写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3973大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2361一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7482我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2743@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2068转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3076用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1739element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9780示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6549申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5291最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5282springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10395微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
这个库被广泛应用于移动设备和Web应用程序中,支持多种编码格式,如QR码、条形码(Code 128、EAN-13等)以及各种二维和一维条码。在提供的信息中,我们看到有三个不同版本的ZXing库的JAR文件:2.3、3.0和3.1.1,这些...
**Zxing (Zebra Crossing)** 是一个开源的条码解码框架,由Google开发,支持多种条码格式,包括一维条码(如EAN-13、UPC-A)和二维条码(如QR Code、Data Matrix)。Zxing的核心库(core)可以用于多种平台,包括...
Zxing,全称“Zebra Crossing”,是一款开源的多格式一维/二维条码图像处理库,支持多种平台,包括Java、Android和iOS。 首先,我们需要理解Zxing的核心组件。在Zxing中,`Core`模块是最基础的部分,它包含了所有...
二维码条码扫描源码,使用Zxing core2.3.zip”(实际为rar格式)提供了一个基于Zxing库的二维码和条形码扫描解决方案,并且附带了详尽的注释,对于开发者来说是一个很好的学习和参考资源。 Zxing,全称“Zebra ...
这个项目使用了Zxing(ZXing,取自“Zebra Crossing”的缩写)的核心库,版本为2.3,它是一个开源的、多格式的一维和二维条码图像处理库。 【描述】中提到的“安卓Andriod源码——详细注释!”意味着这个代码库包含...
Zxing是一个跨平台的开源项目,用于读取、写入多种一维和二维条码。它提供了多种客户端应用,包括Java库、命令行工具以及针对Android和iOS的原生应用。在Android上,Zxing库通常通过集成其核心库来实现扫描功能。 1...
ZXing(Zebra Crossing)是一个开源项目,提供多种格式的一维和二维条码的读取和生成能力。这个项目为多个平台提供了库,包括Java、Android以及Web版本。在Android平台上,ZXing通常通过集成Zxingcore库来实现扫描...
这个项目提供了多种条码格式(包括一维和二维)的生成和解码功能,广泛应用于移动设备上的扫描应用。ZXing 3.3版本的发布,带来了性能优化和新特性的添加,确保了更好的稳定性和兼容性。 在这个压缩包中,我们包含...
本款1维/2维条码扫描器(THIR-6780系列)是一款高效可靠的条码读取设备,支持多种类型的条码识别,包括但不限于常见的1维条码如Code39、Code128等,以及2维条码如QR Code、Data Matrix等。产品设计紧凑,操作简便,...
Zxing(ZXing,发音为“zebra crossing”,斑马线)是一个开放源码的、跨平台的多种格式的一维和二维条码图像处理库,它包含了读取、解码和生成条码图像的各种功能。在这个项目中,Zxing核心库2.3被用于实现扫描功能...
有一些错误会阻止以纵向模式扫描(尤其是一维码,QR 等应该没问题)。 我已经测试了代码并且它(至少)在 Android 2.1 (Eclair)、2.3 (Gingerbread) 和 4.4 (KitKat) 中工作。 如果你的不起作用,请创建一个问题。...
相比于一维条形码,二维码能够在更小的空间内存储更多的信息,包括文字、数字、网址等。此外,二维码具有较高的容错率,即使部分损坏,仍能正确解码。这使得二维码在物流、广告、支付等多个领域都有广泛的应用。 ...
- **定义**: 二维码是一种二维条形码,能够存储比一维码更多的信息。 - **特点**: 容量大、容错能力强、读取速度快。 - **应用**: 电子商务、物流管理、身份验证等。 - **2.4 DES加密算法介绍** - **原理**: DES...
1.1 基本原理:二维码,全称Quick Response Code,快速响应码,是一种二维条形码。它通过将数据编码为黑白相间的图形,以便由特定的扫描设备读取并解码。二维码可以存储各种类型的信息,如文字、数字、网址、名片...
相比传统的一维条码,二维码具有以下优势: - **高密度**:单位面积内能存储更多数据。 - **多方向读取**:不受扫描方向限制。 - **错误纠正能力**:即使部分损坏也能被正确识别。 - **快速解码**:支持高速数据读取...
超简单集成华为HMS Scankit扫码服务实现扫一扫二维码前言官网的Demo和Sample代码体验1 开发前...最近要做一个停车场扫码收费的app,在网上搜了一圈,首先接触到了ZXing,上手试了下,集成过程不复杂,但是感觉效果欠佳