使用QRCode和zXing生成二维码

首先将需要的jar加到工程中

QRCode.jar、zxingcore-2.2.jar、javase-2.2.jar(也可不加,增加一个MatrixToImageWriter类也可以)

package com.demo;
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;
/**
 * 
* @ClassName: MatrixToImageWriter 
* @Description: 如果不想增加javase-2.2.jar,新增此类即可
* @date 2015年4月30日 上午10:05:51
* @since   AR1.0
 */
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);
    }
  }
}

测试类

package com.demo;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.swetake.util.Qrcode;
public class QRCodeDemo {
 public static void main(String[] args) {
  QRCodeDemo.encoderQRCode("这是用Qrcode生成的二维码", "C:/Users/liyy/Desktop/TestQRCode.png");
  QRCodeDemo.zXingTest("这是用zXing生成的二维码", "C:/Users/liyy/Desktop/TestZXing.png");
 }
 /**
  *
  * @Title: encoderQRCode
  * @Description: 使用Qrcode生成二维码
  * @param @param content
  * @param @param imgPath
  * @return void 返回类型
  * @throws
  */
 public static void encoderQRCode(String content, String imgPath) {
  try {
   Qrcode qrcodeHandler = new Qrcode();
   qrcodeHandler.setQrcodeErrorCorrect(‘M‘);// 纠错
   qrcodeHandler.setQrcodeEncodeMode(‘B‘);
   qrcodeHandler.setQrcodeVersion(7);
   byte[] contentBytes = content.getBytes("gb2312");
   BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
   Graphics2D gs = bufImg.createGraphics();
   gs.setBackground(Color.WHITE);
   gs.clearRect(0, 0, 140, 140);
   // 设定图像颜色> BLACK
   gs.setColor(Color.BLACK);
   // 设置偏移量
   int pixoff = 2;
   // 输出内容> 二维码
   if ((contentBytes.length > 0) && (contentBytes.length < 120)) {
    boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
    for (int i = 0; i < codeOut.length; i++) {
     for (int j = 0; j < codeOut.length; j++) {
      if (codeOut[j][i]) {
       gs.fillRect((j * 3) + pixoff, (i * 3) + pixoff, 3, 3);
      }
     }
    }
   } else {
    System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");
   }
   gs.dispose();
   bufImg.flush();
   File imgFile = new File(imgPath);
   // 生成二维码QRCode图片
   ImageIO.write(bufImg, "png", imgFile);
   System.out.println("Qrcode已输出二维码!");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 /**
  *
  * @Title: zXingTest
  * @Description: 使用google的zXing生成二维码
  * @param
  * @return void 返回类型
  * @throws
  */
 @SuppressWarnings({ "rawtypes", "unchecked" })
 public static void zXingTest(String content, String imgPath) {
  try {
   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(imgPath);
   MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1);
   System.out.println("zXing已输出二维码!");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
时间: 2024-12-25 05:33:16

使用QRCode和zXing生成二维码的相关文章

ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(goole)生的,QRCode就不用说了吧,虽说技术无国界,但是国人还是有点.... 好,言归正传,java用ZXi

(转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(gool

java学习-zxing生成二维码矩阵的简单例子

这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件 也可使用maven添加依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> 最简单的生成二维码的方法,

zxing生成二维码设置边框颜色

真是研究了很久很久,满满的泪啊 zxing生成二维码,默认是可以增加空白边框的,但是并没有说设置边框颜色的属性. 其中增加空白边框的属性的一句话是: Map hints = new HashMap();hints.put(EncodeHintType.MARGIN, 1); 使用这句话设置边框,留出来的边框的颜色,就是二维码中主颜色的以外的那个颜色.通常主颜色都是黑色,背景色都是白色.如下二维码的边框的颜色,就是除了绿色以外的那个颜色. 所以并没有设置边框颜色的属性,那该怎么办?比如:要求使用P

引用ZXing生成二维码

1.生成二维码 ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口. Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.本文引用zxing.dll,生成二维码. using com.google.zxing.qrcode; using com.google.zxing; using com.google.zxing.common; using ByteMatrix = com.google.zxing.common.Byte

Java通过Zxing生成二维码

今天,要完成一个批量生成二维码的工作,并将生成好的二维码与另外一张底图拼接,生成一张新图. Java生成二维码主要的sdk为,qrcode和zxing,二者差别不大,这里采用了zxing. 首先,直接使用其core.jar,然后实现MatrixToImageWriter类. 在使用zxing时,我们发现默认生成的白边太大,想进行修改,通过updateBit方法进行指定白边的宽度.在修改完其白边后,会影响默认设置的二维码大小,通过zoomInImage方法进行修复. 在合成两张图片时,通过Smal

利用zxing生成二维码

使用zxing类库可以很容易生成二维码QRCode,主要代码如下: private Bitmap createQRCode(String str,int width,int height) { Bitmap bmp=null; if(str.equals(""))return null; try { MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); Map<EncodeHintType, Object&g

Android:使用ZXing生成二维码(支持加入Logo图案)

ZXing是谷歌的一个开源库.能够用来生成二维码.扫描二维码.本文所介绍的是第一部分. 首先上效果图: ZXing相关各种文件官方下载地址:https://github.com/zxing/zxing/releases 或者在这里下载(仅仅有本项目所用的jar包,版本:3.2.0):链接: http://pan.baidu.com/s/1hq3s5EW password: mvg7 1.生成二维码的工具类 /** * 二维码生成工具类 */ public class QRCodeUtil { /

Android -- 采用zxing生成二维码

首先在grandle里面添加zxing的库引用 compile 'com.google.zxing:core:3.1.0' 生成二维码静态类,返回一张二维码的Bitmap public class QrCodeUtil { // 生成QR图 public static Bitmap getQrCodeImage(int QR_WIDTH, int QR_HEIGHT, String text) throws WriterException { try { // 需要引入core包 QRCodeW