java实现二维码的生成和解析:QRCode、zxing 两种方式 您所在的位置:网站首页 如何用浏览器识别图片二维码信息 java实现二维码的生成和解析:QRCode、zxing 两种方式

java实现二维码的生成和解析:QRCode、zxing 两种方式

2024-07-11 10:08| 来源: 网络整理| 查看: 265

第一种:QRCode.jar,使用QRCode生成和解析二维码

1.导入jar包

 

 2.代码

(1)QRCodeUtil .java

1 import com.swetake.util.Qrcode; 2 import jp.sourceforge.qrcode.QRCodeDecoder; 3 4 import javax.imageio.ImageIO; 5 import java.awt.*; 6 import java.awt.image.BufferedImage; 7 import java.io.File; 8 9 public class QRCodeUtil { 10 /** 11 *加密: 文字信息 ->二维码.png 12 * @param content 文字信息 13 * @param imgPath 二维码路径 14 * @param imgType 二维码类型:png 15 * @param size 二维码尺寸 16 * @throws Exception 17 */ 18 public void encoderQRCode(String content,String imgPath,String imgType,int size) throws Exception{ 19 //BufferedImage :内存中的一张图片 20 BufferedImage bufImg = qRcodeCommon(content,imgType,size); 21 22 File file = new File(imgPath);// "src/二维码.png" --> 二维码.png 23 24 //生成图片 25 ImageIO.write(bufImg, imgType, file); 26 } 27 28 /** 29 *产生一个二维码的BufferedImage 30 * @param content 二维码隐藏信息 31 * @param imgType 图片格式 32 * @param size 图片大小 33 * @return 34 */ 35 private BufferedImage qRcodeCommon(String content, String imgType, int size) throws Exception { 36 BufferedImage bufImg =null; 37 //Qrcode对象:字符串->boolean[][] 38 Qrcode qrCodeHandler = new Qrcode(); 39 //设置二维码的排错率:7% LString 95 String content = new String(bs,"UTF-8"); 96 return content; 97 } 98 99 100 }

 (2)TwoDimensionCodeImage .java

1 import jp.sourceforge.qrcode.data.QRCodeImage; 2 3 import java.awt.image.BufferedImage; 4 5 public class TwoDimensionCodeImage implements QRCodeImage { 6 BufferedImage bufImg; //将图片加载到内存中 7 public TwoDimensionCodeImage(BufferedImage bufImg) { 8 this.bufImg = bufImg; 9 } 10 public int getWidth() { 11 return bufImg.getWidth(); 12 } 13 14 public int getHeight() { 15 return bufImg.getHeight(); 16 } 17 18 public int getPixel(int x, int y) { 19 return bufImg.getRGB(x,y); 20 } 21 }

 (3)Test .java

1 public class Test { 2 public static void main(String[] args) throws Exception{ 3 //生成二维码 4 /* 5 * 生成图片的路径 src/二维码.png 6 * 文字信息、网址信息 : "helloworld" 7 */ 8 String imgPath = "e:\\二维码2.png"; 9 String content = "http://baidu.com"; //扫描二维码后,网页跳转 10 11 //生成二维码 12 /* 13 * 加密: 文字信息 ->二维码 14 * 解密: 二维码 -> 文字信息 15 */ 16 QRCodeUtil qrUtil = new QRCodeUtil(); 17 //加密: 文字信息 ->二维码 18 qrUtil.encoderQRCode(content, imgPath, "png", 17); 19 20 // TwoDimensionCode handler = new TwoDimensionCode(); 21 // handler.encoderQRCode(content, imgPath, "png", 7); 22 23 24 // //解密: 二维码 -> 文字信息 25 String imgContent = qrUtil.decoderQRCode(imgPath) ; 26 System.out.println(imgContent); 27 28 29 } 30 }

第二种:借助Google提供的ZXing Core工具包

1.maven依赖

1 2 com.google.zxing 3 core 4 3.4.0 5 6 7 com.google.zxing 8 javase 9 3.3.1 10

2.代码

(1)ZXingUtil .java

1 import com.google.zxing.*; 2 import com.google.zxing.client.j2se.BufferedImageLuminanceSource; 3 import com.google.zxing.common.BitMatrix; 4 import com.google.zxing.common.HybridBinarizer; 5 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; 6 import jp.sourceforge.qrcode.util.Color; 7 8 import javax.imageio.ImageIO; 9 import java.awt.image.BufferedImage; 10 import java.io.File; 11 import java.util.HashMap; 12 import java.util.Hashtable; 13 import java.util.Map; 14 15 public class ZXingUtil { 16 public static void encodeImg(String imgPath,String format,String content,int width,int height,String logo) throws Exception { 17 Hashtable hints = new Hashtable() ; 18 //排错率 L内存中的一张图片 50 BufferedImage imge = ImageIO.read(file) ; 51 52 MultiFormatReader formatReader = new MultiFormatReader() ; 53 LuminanceSource source = new BufferedImageLuminanceSource(imge); 54 Binarizer binarizer = new HybridBinarizer(source); 55 BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer); 56 //图片 ->result 57 Map map = new HashMap(); 58 map.put(EncodeHintType.CHARACTER_SET, "utf-8") ; 59 Result result = formatReader.decode(binaryBitmap ,map ) ; 60 System.out.println("解析结果:"+ result.toString()); 61 } 62 63 }

(2)LogoUtil .java

1 import javax.imageio.ImageIO; 2 import java.awt.*; 3 import java.awt.geom.RoundRectangle2D; 4 import java.awt.image.BufferedImage; 5 import java.io.File; 6 import java.io.IOException; 7 8 public class LogoUtil { 9 //传入logo、二维码 ->带logo的二维码 10 public static BufferedImage logoMatrix( BufferedImage matrixImage,String logo ) throws IOException { 11 //在二维码上画logo:产生一个 二维码画板 12 Graphics2D g2 = matrixImage.createGraphics(); 13 14 //画logo: String->BufferedImage(内存) 15 BufferedImage logoImg = ImageIO.read(new File(logo)); 16 int height = matrixImage.getHeight(); 17 int width = matrixImage.getWidth(); 18 //纯logo图片 19 g2.drawImage(logoImg, width * 2 / 5, height * 2 / 5, width * 1 / 5, height * 1 / 5, null); 20 21 //产生一个 画 白色圆角正方形的 画笔 22 BasicStroke stroke = new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 23 //将画板-画笔 关联 24 g2.setStroke(stroke); 25 //创建一个正方形 26 RoundRectangle2D.Float round = new RoundRectangle2D.Float(width * 2 / 5, height * 2 / 5, width * 1 / 5, height * 1 / 5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 27 g2.setColor(Color.WHITE); 28 g2.draw(round); 29 30 //灰色边框 31 BasicStroke stroke2 = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 32 g2.setStroke(stroke2); 33 //创建一个正方形 34 RoundRectangle2D.Float round2 = new RoundRectangle2D.Float(width * 2 / 5 + 2, height * 2 / 5 + 2, width * 1 / 5 - 4, height * 1 / 5 - 4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); 35 // Color color = new Color(128,128,128) ; 36 g2.setColor(Color.GRAY); 37 g2.draw(round2); 38 39 g2.dispose(); 40 matrixImage.flush(); 41 42 return matrixImage; 43 } 44 }

(3)test.java

1 import java.io.File; 2 3 public class test { 4 public static void main(String[] args) throws Exception { 5 String imgPath = "src/二维码12.png"; 6 String content = "helloworld你好"; 7 String logo = "src/logo.png"; 8 //加密:文字信息->二维码 9 ZXingUtil.encodeImg(imgPath, "png",content, 430, 430,logo); 10 //解密:二维码 ->文字信息 11 ZXingUtil.decodeImg(new File(imgPath)); 12 } 13 }

(效果图)

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有