package com.lyy.util;
import java.awt.Frame;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import org.jbarcode.JBarcode;
import org.jbarcode.encode.Code128Encoder;
import org.jbarcode.encode.EAN13Encoder;
import org.jbarcode.encode.EAN8Encoder;
import org.jbarcode.encode.InvalidAtributeException;
import org.jbarcode.encode.UPCAEncoder;
import org.jbarcode.paint.EAN13TextPainter;
import org.jbarcode.paint.EAN8TextPainter;
import org.jbarcode.paint.UPCATextPainter;
import org.jbarcode.paint.WidthCodedPainter;
import org.jbarcode.util.ImageUtil;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.BlackPointEstimationMethod;
import com.google.zxing.ChecksumException;
import com.google.zxing.FormatException;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MonochromeBitmapSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BaseMonochromeBitmapSource;
import com.google.zxing.common.BitArray;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
/**
* 利用jbarcode生成各种条形码!
* 利用zxing解析生成的条码
* @author lyy
*
*/
public class BarcodeUtil {
//生成EAN8条码
public static void build8barcode(){
JBarcode jBarcode = new JBarcode(EAN8Encoder.getInstance(),
WidthCodedPainter.getInstance(), EAN8TextPainter.getInstance());
String str = "5201314";
BufferedImage bufferedImage = null;
try {
bufferedImage = jBarcode.createBarcode(str);
FileOutputStream fileOutputStream = new FileOutputStream("F:"
+ File.separator + "file_util" + File.separator
+ "test.jpg");
ImageUtil.encodeAndWrite(bufferedImage, "jpeg", fileOutputStream);
System.out.println("ok");
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//生成EAN13条码
public static void build13barcode(){
JBarcode jBarcode=new JBarcode(EAN13Encoder.getInstance(),
WidthCodedPainter.getInstance(), EAN13TextPainter.getInstance());
String str = "110802141314";
System.out.println(str);
BufferedImage bufferedImage = null;
try {
bufferedImage = jBarcode.createBarcode(str);
FileOutputStream fileOutputStream = new FileOutputStream("F:"
+ File.separator + "file_util" + File.separator
+ "test13.jpg");
ImageUtil.encodeAndWrite(bufferedImage, "jpeg", fileOutputStream);
System.out.println("ok");
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//解析条码
public static void parseBarcode(){
Reader reader=new MultiFormatReader();
String filename="F:"+ File.separator + "file_util" + File.separator
+ "test.jpg";
Image image= Toolkit.getDefaultToolkit().getImage(filename);
MediaTracker mediaTracker=new MediaTracker(new Frame());
mediaTracker.addImage(image, 0);
BufferedImage bufferedImage=null;
try {
mediaTracker.waitForID(0);
bufferedImage=new BufferedImage(image.getWidth(null),image.getHeight(null), BufferedImage.TYPE_INT_BGR);
bufferedImage.createGraphics().drawImage(image,0,0,null);;
LuminanceSource source=new BufferedImageLuminanceSource(bufferedImage);
BinaryBitmap binaryBitmap= new BinaryBitmap(new HybridBinarizer(source));
Result result=reader.decode(binaryBitmap);
System.out.println("解析得到的条码值为:"+result.getText());
} catch (InterruptedException | NotFoundException | ChecksumException | FormatException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
build8barcode();
build13barcode();
parseBarcode();
}
}