用java程序如何读取图书条形码

2024-12-15 01:45:38
推荐回答(3个)
回答1:

一个比较好的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;
}

}

回答2:

  首先读取条形码是硬件扫描的,这个和编程语言无关,例如:手机可以扫描二维码和条形码

  至于读取方式这个我只能给你说个思路

  1. 扫描后获取到的肯定是图像数据,一般解析方式是根据颜色反差和坐标差异,定义好比例变量

  2. 如果你要是用其他设备可能就简单了,扫描二维码的设备应该有内置的系统可以直接识别成数字代码,直接使用IO流读取就好了.

  参考:   http://www.lupaworld.com/proj-class-type-tag-sid-122.html

     http://www.oschina.net/p/zebra+barcode+reader

回答3:

条形码(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;
}
}

下面就是如何扫描来获取商品上的条形码了,
这个就需要通过针对硬件进行编程了.