Barcode简介
Barcode是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的,一种机器可读的数据表示方式。
Barcode的形式多种多样,按照它们的外观分类:
Linear barcode(一维码):它的信息存储量小,仅能存储一个代号,使用时通过这个代号调取计算机网络中的数据。
Matrix barcode(二维码)。二维码是近几年发展起来的,它能在有限的空间内存储更多的信息,包括文字、图象、指纹、签名等,并可脱离计算机使用。
你可能认为你对它们都有所了解,因为它们大概都是这个样子的:
但事实上,它们有甚至有可能是这样子的:
我们通常所说的二维码,只是Matrix barcode的一种,叫做QR code。
Barcode种类繁多,有些编码格式并不常用,即使是ZXing也没有做到所有格式的支持,开发者只需了解就好。
其中包括:
一维条码编码格式:
Code39码(标准39码)、Codabar码(库德巴码)、Code25码(标准25码)、ITF25码(交叉25码)、Matrix25码(矩阵25码)、UPC-A码、UPC-E码、
EAN-13码(EAN-13国际商品条码)、EAN-8码(EAN-8国际商品条码)、中国邮政码(矩阵25码的一种变体)、Code-B码、MSI码、Code11码、Code93码、ISBN码、ISSN码、
Code128码(Code128码,包括EAN128码)、Code39EMS(EMS专用的39码)等
二维条码编码格式:
PDF417码、Code49码、Code 16k码、Date Matrix码、MaxiCode码(包括 QR Code码)等。
Code 39、Code 128、EAN、UPC、QR Code是我们生活中能经常见到的几种编码格式,同时ZXing对几种格式都有比较好的支持。
其中,UPC-A是一种国际通用的编码格式,由12个数字构成,EAN-13是在UPC-A基础上的一种扩充(多了一个数字)。快数一数你身边的薯片的编码是不是13位!如果是的话,它最前边的两个数字是不是“69”?
在EAN-13的编码体系中,前三位数字表示商品生产商的国家(并不是商品所属公司的国家),中国的编码是690~699,美国是(000~019、030~039、060~139),日本是(450~459、490~499),and so on。
不同的编码格式通常用在不同的领域,如果你看到了一个Code 39或者Code 128的Barcode,那么这很就可能是一个快递编码,这个时候你就可以去那些提供快递查询的网站查询一下你的快递信息,如果有API提供出来那就更是再好不过了。
至于QR Code,就是我们经常用手机扫一扫的二维码,表示的信息更是多种多样,并不仅仅是一个url那么简单,至于这些信息如何处理,是我们一会儿将要讨论的内容。
一、google的zxing(jar包下载)
1:条形码的生成与解码(生成的条形码不显示 本身的条码含义,即:条码下方没有数字字母等。如有需要,自行拼接)
1 import java.awt.image.BufferedImage; 2 import java.io.File; 3 import java.io.FileOutputStream; 4 5 import javax.imageio.ImageIO; 6 7 import com.google.zxing.BarcodeFormat; 8 import com.google.zxing.BinaryBitmap; 9 import com.google.zxing.LuminanceSource; 10 import com.google.zxing.MultiFormatReader; 11 import com.google.zxing.MultiFormatWriter; 12 import com.google.zxing.Result; 13 import com.google.zxing.client.j2se.BufferedImageLuminanceSource; 14 import com.google.zxing.client.j2se.MatrixToImageWriter; 15 import com.google.zxing.common.BitMatrix; 16 import com.google.zxing.common.HybridBinarizer; 17 18 public class ZxingEAN13Code { 19 /** 20 * 条形码编码 21 * @param contents 22 * @param width 23 * @param height 24 * @param imgPath 25 */ 26 public void encode(String contents, int width, int height, String imgPath) { 27 //保证最小为70*25的大小 28 int codeWidth = Math.max(70, width); 29 int codeHeight = Math.max(25, height); 30 try { 31 //使用EAN_13编码格式进行编码 32 BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, 33 BarcodeFormat.EAN_13, codeWidth, codeHeight, null); 34 //生成png格式的图片保存到imgPath路径 35 MatrixToImageWriter.writeToStream(bitMatrix, "png&