public class ZxingTest {
public static void main(String[] args) throws WriterException, IOException {
String mecard = "MECARD:N:王**;ORG:杭州;EMAIL:wgshuaiit@163.com;ADR:杭州;NOTE:java开发;;";
// 还是乱码 mecard = new String(mecard.getBytes("ISO8859-1"), "UTF-8");
//解决乱码
Map<EncodeHintType,String> hints = Maps.newHashMap();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(mecard, BarcodeFormat.QR_CODE, 200, 200,hints);
MatrixToImageWriter.writeToStream(bitMatrix, "png", new FileOutputStream("D:/qr.png"));
}
}
/**
* 将客户信息生成二维码
*/
@RequestMapping(value = "/qrcode/{id:\\d+}.png",method = RequestMethod.GET)
public void makeQrCode(@PathVariable Integer id,HttpServletResponse response) throws IOException, WriterException {
String mecard = customerService.makeMeCard(id);
Map<EncodeHintType,String> hints = Maps.newHashMap();
hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(mecard, BarcodeFormat.QR_CODE,200,200,hints);
OutputStream outputStream = response.getOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix,"png",outputStream);
outputStream.flush();
outputStream.close();
}
/**
* 将客户信息生成MECard格式
* @param id
* @return
*/
public String makeMeCard(Integer id) {
Customer customer = customerMapper.findById(id);
StringBuilder mecard = new StringBuilder("MECARD:");
if(StringUtils.isNotEmpty(customer.getName())) {
mecard.append("N:"+customer.getName()+";");
}
if(StringUtils.isNotEmpty(customer.getTel())) {
mecard.append("TEL:"+customer.getTel()+";");
}
if(StringUtils.isNotEmpty(customer.getEmail())) {
mecard.append("EMAIL:"+customer.getEmail()+";");
}
if(StringUtils.isNotEmpty(customer.getAddress())) {
mecard.append("ADR:"+customer.getAddress()+";");
}
if(StringUtils.isNotEmpty(customer.getCompanyname())) {
mecard.append("ORG:"+customer.getCompanyname()+";");
}
mecard.append(";");
return mecard.toString();
}
使用
div class="box-body" style="text-align: center">
![](/makeQrCode.png)
</div>
工具类
package com.kaishengit.util;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
/**
* 二维码工具类
*/
public class QrCodeUtil {
// 默认二维码宽度
private static final int width = 300;
// 默认二维码高度
private static final int height = 300;
// 默认二维码文件格式
private static final String format = "png";
// 二维码参数
private static final Map<EncodeHintType, Object> hints = new HashMap();
static {
// 字符编码
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 容错等级 L、M、Q、H 其中 L 为最低, H 为最高
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 二维码与图片边距
hints.put(EncodeHintType.MARGIN, 2);
}
/**
* 将二维码图片输出到一个流中
* @param content 二维码内容
* @param stream 输出流
* @param width 宽
* @param height 高
*/
public static void writeToStream(String content, OutputStream stream, int width, int height) throws WriterException, IOException {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
MatrixToImageWriter.writeToStream(bitMatrix, format, stream);
}
/**
* 生成二维码图片文件
* @param content 二维码内容
* @param path 文件保存路径
* @param width 宽
* @param height 高
*/
public static void createQRCode(String content, String path, int width, int height) throws WriterException, IOException {
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
//toPath() 方法由 jdk1.7 及以上提供
MatrixToImageWriter.writeToPath(bitMatrix, format, new File(path).toPath());
}
}
maven 依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.0.0</version>
</dependency>
package com.kaishengit;
import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Hashtable;
public class Test {
public static void main(String[] args) throws IOException {
String text = "www.baidu.com";
int width = 100;
int height = 100;
String format = "png";
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
hints.put(EncodeHintType.MARGIN, 2);
try {
BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
Path file = new File("D:/new.png").toPath();
MatrixToImageWriter.writeToPath(bitMatrix, format, file);
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//解析二维码
resolve();
}
private static void resolve() {
MultiFormatReader formatReader = new MultiFormatReader();
File file = new File("D:/new.png");
BufferedImage image = null;
try {
image = ImageIO.read(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
Result result = null;
try {
result = formatReader.decode(binaryBitmap, hints);
} catch (NotFoundException e) {
e.printStackTrace();
}
System.err.println("解析结果:" + result.toString());
System.out.println(result.getBarcodeFormat());
System.out.println(result.getText());
}
}