欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java利用Zxing生成二維碼的簡單實例

 更新時間:2016年08月22日 09:45:38   投稿:jingxian  
下面小編就為大家?guī)硪黄狫ava利用Zxing生成二維碼的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Zxing是Google提供的關于條碼(一維碼、二維碼)的解析工具,提供了二維碼的生成與解析的方法,現(xiàn)在我簡單介紹一下使用Java利用Zxing生成與解析二維碼

1、二維碼的生成

1.1 將Zxing-core.jar 包加入到classpath下。

1.2 二維碼的生成需要借助MatrixToImageWriter類,該類是由Google提供的,可以將該類拷貝到源碼中,這里我將該類的源碼貼上,可以直接使用。

import com.google.zxing.common.BitMatrix;
 
 import javax.imageio.ImageIO;
 import java.io.File;
 import java.io.OutputStream;
 import java.io.IOException;
 import java.awt.image.BufferedImage;
 
 
 public final class MatrixToImageWriter {
 
  private static final int BLACK = 0xFF000000;
  private static final int WHITE = 0xFFFFFFFF;
 
  private MatrixToImageWriter() {}
 
  
  public static BufferedImage toBufferedImage(BitMatrix matrix) {
   int width = matrix.getWidth();
   int height = matrix.getHeight();
   BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   for (int x = 0; x < width; x++) {
    for (int y = 0; y < height; y++) {
     image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
    }
   }
   return image;
  }
 
  
  public static void writeToFile(BitMatrix matrix, String format, File file)
    throws IOException {
   BufferedImage image = toBufferedImage(matrix);
   if (!ImageIO.write(image, format, file)) {
    throw new IOException("Could not write an image of format " + format + " to " + file);
   }
  }
 
  
  public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
    throws IOException {
   BufferedImage image = toBufferedImage(matrix);
   if (!ImageIO.write(image, format, stream)) {
    throw new IOException("Could not write an image of format " + format);
   }
  }
 
 }

1.3 編寫生成二維碼的實現(xiàn)代碼

try {
       
   String content = "120605181003;http://www.cnblogs.com/jtmjx";
   String path = "C:/Users/Administrator/Desktop/testImage";
   
   MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
   
   Map hints = new HashMap();
   hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
   BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400,hints);
   File file1 = new File(path,"餐巾紙.jpg");
   MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);
   
 } catch (Exception e) {
   e.printStackTrace();
 }

現(xiàn)在運行后即可生成一張二維碼圖片,是不是很簡單??? 接下來我們看看如何解析二維碼

2、二維碼的解析

2.1 將Zxing-core.jar 包加入到classpath下。  

2.2 和生成一樣,我們需要一個輔助類( BufferedImageLuminanceSource),同樣該類Google也提供了,這里我同樣將該類的源碼貼出來,可以直接拷貝使用個,省去查找的麻煩

BufferedImageLuminanceSource 
 import com.google.zxing.LuminanceSource;
 
 import java.awt.Graphics2D;
 import java.awt.geom.AffineTransform;
 import java.awt.image.BufferedImage;
 
 public final class BufferedImageLuminanceSource extends LuminanceSource {
 
  private final BufferedImage image;
  private final int left;
  private final int top;
 
  public BufferedImageLuminanceSource(BufferedImage image) {
   this(image, 0, 0, image.getWidth(), image.getHeight());
  }
 
  public BufferedImageLuminanceSource(BufferedImage image, int left, int top, int width, int height) {
   super(width, height);
 
   int sourceWidth = image.getWidth();
   int sourceHeight = image.getHeight();
   if (left + width > sourceWidth || top + height > sourceHeight) {
    throw new IllegalArgumentException("Crop rectangle does not fit within image data.");
   }
 
   for (int y = top; y < top + height; y++) {
    for (int x = left; x < left + width; x++) {
     if ((image.getRGB(x, y) & 0xFF000000) == 0) {
      image.setRGB(x, y, 0xFFFFFFFF); // = white
     }
    }
   }
 
   this.image = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_BYTE_GRAY);
   this.image.getGraphics().drawImage(image, 0, 0, null);
   this.left = left;
   this.top = top;
  }
 
  @Override
  public byte[] getRow(int y, byte[] row) {
   if (y < 0 || y >= getHeight()) {
    throw new IllegalArgumentException("Requested row is outside the image: " + y);
   }
   int width = getWidth();
   if (row == null || row.length < width) {
    row = new byte[width];
   }
   image.getRaster().getDataElements(left, top + y, width, 1, row);
   return row;
  }
 
  @Override
  public byte[] getMatrix() {
   int width = getWidth();
   int height = getHeight();
   int area = width * height;
   byte[] matrix = new byte[area];
   image.getRaster().getDataElements(left, top, width, height, matrix);
   return matrix;
  }
 
  @Override
  public boolean isCropSupported() {
   return true;
  }
 
  @Override
  public LuminanceSource crop(int left, int top, int width, int height) {
   return new BufferedImageLuminanceSource(image, this.left + left, this.top + top, width, height);
  }
 
  @Override
  public boolean isRotateSupported() {
   return true;
  }
 
  @Override
  public LuminanceSource rotateCounterClockwise() {
 
    int sourceWidth = image.getWidth();
   int sourceHeight = image.getHeight();
 
   AffineTransform transform = new AffineTransform(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth);
 
   BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, BufferedImage.TYPE_BYTE_GRAY);
 
   Graphics2D g = rotatedImage.createGraphics();
   g.drawImage(image, transform, null);
   g.dispose();
 
   int width = getWidth();
   return new BufferedImageLuminanceSource(rotatedImage, top, sourceWidth - (left + width), getHeight(), width);
  }
 
 }

2.3 編寫解析二維碼的實現(xiàn)代碼

try {
             MultiFormatReader formatReader = new MultiFormatReader();
       String filePath = "C:/Users/Administrator/Desktop/testImage/test.jpg";
       File file = new File(filePath);
       BufferedImage image = ImageIO.read(file);;
       LuminanceSource source = new BufferedImageLuminanceSource(image);
       Binarizer binarizer = new HybridBinarizer(source);
       BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
       Map hints = new HashMap();
       hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
       Result result = formatReader.decode(binaryBitmap,hints);
       
             System.out.println("result = "+ result.toString());
       System.out.println("resultFormat = "+ result.getBarcodeFormat());
       System.out.println("resultText = "+ result.getText());
             
     } catch (Exception e) {
       e.printStackTrace();
     }

現(xiàn)在運行后可以看到控制臺打印出了二維碼的內容。

到此為止,利用Zxing生成和解析二維碼就講述演示完畢,主要為自己做備忘,同時方便有需要的人。呵呵!

以上這篇Java利用Zxing生成二維碼的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Mybatis一對多關聯(lián)關系映射實現(xiàn)過程解析

    Mybatis一對多關聯(lián)關系映射實現(xiàn)過程解析

    這篇文章主要介紹了Mybatis一對多關聯(lián)關系映射實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • spring boot優(yōu)雅集成redisson詳解

    spring boot優(yōu)雅集成redisson詳解

    這篇文章主要為大家介紹了spring boot優(yōu)雅集成redisson詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java 二叉樹遍歷的常用方法

    Java 二叉樹遍歷的常用方法

    二叉樹的遍歷可以說是解決二叉樹問題的基礎。我們常用的遍歷方式無外乎就四種 前序遍歷、中序遍歷、后續(xù)遍歷、層次遍歷 這四種。
    2021-05-05
  • java轉發(fā)和重定向的區(qū)別

    java轉發(fā)和重定向的區(qū)別

    這篇文章主要介紹了java轉發(fā)和重定向的區(qū)別,需要的朋友可以參考下
    2014-10-10
  • SpringSecurity實現(xiàn)動態(tài)url攔截(基于rbac模型)

    SpringSecurity實現(xiàn)動態(tài)url攔截(基于rbac模型)

    本文主要介紹了SpringSecurity動態(tài)url攔截,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java封裝類型與基礎類型對比示例分析

    java封裝類型與基礎類型對比示例分析

    這篇文章主要為大家介紹了java封裝類型與基礎類型對比示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 代理模式之Java動態(tài)代理實現(xiàn)方法

    代理模式之Java動態(tài)代理實現(xiàn)方法

    今天一個偶然的機會我突然想看看JDK的動態(tài)代理,因為以前也知道一點,而且只是簡單的想測試一下使用,使用很快里就寫好了這么幾個接口和類,需要的朋友可以參考下
    2012-11-11
  • Java枚舉與.net枚舉區(qū)別詳解

    Java枚舉與.net枚舉區(qū)別詳解

    這篇文章主要介紹了Java枚舉與.net枚舉區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • El表達式使用問題javax.el.ELException:Failed to parse the expression的解決方式

    El表達式使用問題javax.el.ELException:Failed to parse the expression

    今天小編就為大家分享一篇關于Jsp El表達式使用問題javax.el.ELException:Failed to parse the expression的解決方式,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • springboot中validator數(shù)據(jù)校驗功能的實現(xiàn)

    springboot中validator數(shù)據(jù)校驗功能的實現(xiàn)

    這篇文章主要介紹了springboot中validator數(shù)據(jù)校驗功能,校驗分為普通校驗和分組校驗,每種校驗方式通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-10-10

最新評論