用zxing生成、解析二維碼

nnkde 9年前發布 | 5K 次閱讀 Java Android

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
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.ByteMatrix;
import com.google.zxing.common.HybridBinarizer;
public class Test {
   private static final int BLACK = 0xff000000;
   private static final int WHITE = 0xFFFFFFFF;
 /**

  • @param args */ public static void main(String[] args) { Test test=new Test(); test.encode(); test.decode(); } //------------------------------------------------------------------------------編碼------------------------------------------------- /**
  • 在編碼時需要將com.google.zxing.qrcode.encoder.Encoder.java中的
  • static final String DEFAULT_BYTE_MODE_ENCODING = "ISO8859-1";修改為UTF-8,否則中文編譯后解析不了 */ public void encode(){ try { String str = "姓名:張三,性別:男,年齡:25,籍貫:中國北京,";// 二維碼內容 String path = "D://test.png"; ByteMatrix byteMatrix; byteMatrix= new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 200, 200); File file = new File(path); writeToFile(byteMatrix, "png", file); } catch (Exception e) { e.printStackTrace(); } } public static void writeToFile(ByteMatrix matrix, String format, File file) throws IOException { BufferedImage image = toBufferedImage(matrix); ImageIO.write(image, format, file); } public static BufferedImage toBufferedImage(ByteMatrix matrix) { int width = matrix.getWidth(); int height = matrix.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) {
    image.setRGB(x, y, matrix.get(x, y) == 0 ? BLACK:WHITE);
    
    } } return image; } //-------------------------------------------------------------------解碼---------------------------------------------------- public void decode(){ try{ Reader reader = new MultiFormatReader(); String imgPath = "D://test.png"; File file = new File(imgPath); BufferedImage image; try { image = ImageIO.read(file); if (image == null) { System.out.println("Could not decode image"); } LuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result; Hashtable hints= new Hashtable(); hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); //解碼設置編碼方式為:utf-8, result = new MultiFormatReader().decode(bitmap,hints); String resultStr = result.getText(); System.out.println("解析后內容:"+resultStr); } catch (IOException ioe) { System.out.println(ioe.toString()); } catch (ReaderException re) { System.out.println(re.toString()); } }catch(Exception ex){ System.out.println(ex.toString()); } } }</pre>
 本文由用戶 nnkde 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!