用java程序如何读取图书条形码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java程序如何读取图书条形码相关的知识,希望对你有一定的参考价值。
一个比较好的2d条形码解析条码的工具库从ZXING 中剥离出来的
测试了一下,还可以,基本上清晰图片都可以识别
import java.awt.Frame;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.BufferedImage;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageMonochromeBitmapSource;
public class CodeReader
/**
* @param args
* @throws ReaderException
* @throws InterruptedException
*/
public static void main(String[] args) throws ReaderException, InterruptedException
Reader reader = new MultiFormatReader();
String imgPath =
"test.jpg";
Image image=java.awt.Toolkit.getDefaultToolkit().getImage(imgPath);
BufferedImage myImage = CodeReader.imageToBufImage(image);
MonochromeBitmapSource source = new BufferedImageMonochromeBitmapSource(myImage);
Result result = reader.decode(source);
System.out.println(result.getText());
public static BufferedImage imageToBufImage(Image image) throws InterruptedException
MediaTracker mt=new MediaTracker(new Frame());
mt.addImage(image,0);
mt.waitForID(0);
BufferedImage bufImage=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_BGR);
Graphics2D g2d=bufImage.createGraphics();
g2d.drawImage(image,0,0,null);
return bufImage;
参考技术A
首先读取条形码是硬件扫描的,这个和编程语言无关,例如:手机可以扫描二维码和条形码
至于读取方式这个我只能给你说个思路
扫描后获取到的肯定是图像数据,一般解析方式是根据颜色反差和坐标差异,定义好比例变量
如果你要是用其他设备可能就简单了,扫描二维码的设备应该有内置的系统可以直接识别成数字代码,直接使用IO流读取就好了.
参考: http://www.lupaworld.com/proj-class-type-tag-sid-122.html
http://www.oschina.net/p/zebra+barcode+reader
参考技术B 条形码(barcode)如果要读取的话,肯定需要外设的,比如扫描枪之类的.单从程序上说,
首先就是需要验证这个条形码是否是正确的.
这个代码如下:
/***********************
* 验查一个条形码是否合法,
* 条形码都是13位数字组成,前三位表示前缀码,由国际组织负责管理和制定.
* 接下来是厂商代码, 再下来是编码, 最后1位是检验码.
* 验证规则是:[注:不含最后一位检测位,共计12位参与运算]
* 从第1位开始,所有偶数位之和 * 3, 再加上所有奇数位之和
* 上面的结果对10求余.
* 再用10减去上面的结果,得到的值与检验码相同,说明是一个合法的条形码.
* 详情可以查看百度百科文库
* @param barCode
* @return
*/
public static boolean checkCode(String barCode)
int length = barCode.length();
if(length != 13)
System.err.println("条形码不对.");
return false;
int num1 = 0;
int num2 = 0;
int code = barCode.charAt(barCode.length()-1) - '0';
for(int i = 1;i < length;i+=2)
//求奇数位之和
int temp1 = barCode.charAt(i-1) - '0';
num1 += temp1;
//求偶数位之和
int temp2 = barCode.charAt(i) - '0';
num2 += temp2;
//再求和做判断
if(10 - (num1+num2*3)%10 == code)
return true;
else
return false;
下面就是如何扫描来获取商品上的条形码了,
这个就需要通过针对硬件进行编程了.本回答被提问者采纳
用安卓读取条码
【中文标题】用安卓读取条码【英文标题】:Reading barcodes with android 【发布时间】:2011-01-15 11:15:47 【问题描述】:您好,我正在为 android htc hero 开发一个应用程序。我正在研究使用内置摄像头读取二维条码并提取从条码返回的字符串的方法。我最近才开始使用 android sdk,但我确实有使用 java 进行项目的编程背景。我很想知道读取二维条码的最佳方式是什么。我有一些读取条形码的示例应用程序,但它们都是 .apk 文件,没有我可以使用的源或库。为了让您更好地了解我要完成的工作,该站点允许生成由您想要的数据组成的二维条码here
任何回复将不胜感激。
【问题讨论】:
【参考方案1】:Android 程序可以使用 Intent 相互交互。 Intent 有点像远程过程调用:您要求其他程序执行某个操作(例如扫描条形码),然后其他程序将为您执行此任务。任务完成后返回结果。
如果用户已经安装了 ZXing Barcode Scanner,您可以使用 Intent 来扫描条码。条码扫描器将启动,让用户扫描代码并将结果返回给您。
关于这个扫描仪的更多信息可以在这个项目的谷歌代码页面上找到:http://code.google.com/p/zxing/wiki/ScanningViaIntent
【讨论】:
这里有一个文档,它解释了如何以编程方式测试可以处理意图的活动:developer.android.com/resources/articles/…,如果您想指导用户下载条形码扫描仪应用程序,这个文档有一个要使用的 URI 概述:developer.android.com/guide/publishing/… 有没有办法将 Zxing 集成到我的 android 应用程序中,这样用户就不必单独安装 Zxing BarCode Scanner? 我想使用内置 G 传感器进行扫描,而不是使用相机。当我们想使用手机摄像头进行扫描时,Zxing 是非常有用的库。我正在使用提供内置激光扫描仪的 iData95E 设备。任何人都可以帮助我。 @AKh 这可能有助于使用 Zxing another post 构建您自己的客户端【参考方案2】:我会看看这个开源 Android 项目:http://code.google.com/p/zxing/
【讨论】:
我已经检查过了,但是如何在我的应用程序中集成这个 api 我想在我的应用程序中读取条形码和返回值【参考方案3】:对于 Google 搜索同行,2012 年在 android 开发者博客上有一篇关于如何使用带有条形码扫描示例的意图的帖子:
http://android-developers.blogspot.com/2012/02/share-with-intents.html
【讨论】:
【参考方案4】:据我所知,要解码条形码(除了算法),您需要知道白条和黑条的(相对)宽度。为此,您必须将条形码旋转到水平位置,然后检测宽度。
(好吧,其他人建议的 ZXIng 东西胜过这种手动黑客)
【讨论】:
这不是必需的:只要你可以在所有条形之间画一条水平线,条码就不必是水平的 - 条形的绝对数字会更宽,但相对宽度条和空格的数量将保持不变。换言之,您甚至可以正确扫描旋转或倾斜的条码。以上是关于用java程序如何读取图书条形码的主要内容,如果未能解决你的问题,请参考以下文章
201621123040《Java程序设计》第12周学习总结
201621123014《Java程序设计》第十二周学习总结