博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA用QRCode生成二维码
阅读量:5208 次
发布时间:2019-06-14

本文共 4086 字,大约阅读时间需要 13 分钟。

QRCode jar下载地址:

生成:http://www.swetake.com/qrcode/index-e.html

读取:https://zh.osdn.net/projects/qrcode/

 

示例代码(引用自:http://www.ibloger.net/article/160.html):

package cn.utils;    import java.awt.Color;  import java.awt.Graphics2D;  import java.awt.Image;  import java.awt.image.BufferedImage;  import java.io.File;  import java.io.IOException;  import java.io.UnsupportedEncodingException;    import javax.imageio.ImageIO;    import jp.sourceforge.qrcode.QRCodeDecoder;  import jp.sourceforge.qrcode.data.QRCodeImage;  import jp.sourceforge.qrcode.exception.DecodingFailedException;    import com.swetake.util.Qrcode;    public class QRCodeUtils {      /**      * 编码字符串内容到目标File对象中      *       * @param encodeddata 编码的内容      * @param destFile  生成file文件  1381090722   5029067275903      * @throws IOException      */      public static void qrCodeEncode(String encodeddata, File destFile) throws IOException {          Qrcode qrcode = new Qrcode();          qrcode.setQrcodeErrorCorrect('M');  // 纠错级别(L 7%、M 15%、Q 25%、H 30%)和版本有关          qrcode.setQrcodeEncodeMode('B');              qrcode.setQrcodeVersion(7);     // 设置Qrcode包的版本                    byte[] d = encodeddata.getBytes("GBK"); // 字符集          BufferedImage bi = new BufferedImage(139, 139, BufferedImage.TYPE_INT_RGB);          // createGraphics   // 创建图层          Graphics2D g = bi.createGraphics();                    g.setBackground(Color.WHITE);   // 设置背景颜色(白色)          g.clearRect(0, 0, 139, 139);    // 矩形 X、Y、width、height          g.setColor(Color.BLACK);    // 设置图像颜色(黑色)            if (d.length > 0 && d.length < 123) {              boolean[][] b = qrcode.calQrcode(d);              for (int i = 0; i < b.length; i++) {                  for (int j = 0; j < b.length; j++) {                      if (b[j][i]) {                          g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);                      }                  }              }          }            //      Image img = ImageIO.read(new File("D:/tt.png"));  logo  //      g.drawImage(img, 25, 55,60,50, null);                            g.dispose(); // 释放此图形的上下文以及它使用的所有系统资源。调用 dispose 之后,就不能再使用 Graphics 对象          bi.flush(); // 刷新此 Image 对象正在使用的所有可重构的资源            ImageIO.write(bi, "png", destFile);          System.out.println("Input Encoded data is:" + encodeddata);      }        /**      * 解析二维码,返回解析内容      *       * @param imageFile      * @return      */      public static String qrCodeDecode(File imageFile) {          String decodedData = null;          QRCodeDecoder decoder = new QRCodeDecoder();          BufferedImage image = null;          try {              image = ImageIO.read(imageFile);          } catch (IOException e) {              System.out.println("Error: " + e.getMessage());          }            try {              decodedData = new String(decoder.decode(new J2SEImage(image)), "GBK");              System.out.println("Output Decoded Data is:" + decodedData);          } catch (DecodingFailedException dfe) {              System.out.println("Error: " + dfe.getMessage());          } catch (UnsupportedEncodingException e) {              e.printStackTrace();          }          return decodedData;      }        public static void main(String[] args) {          String FilePath = "d:/qrcode.png";          File qrFile = new File(FilePath);            // 二维码内容          String encodeddata = "Hello X-rapido";          try {              QRCodeUtils.qrCodeEncode(encodeddata, qrFile);          } catch (IOException e) {              e.printStackTrace();          }            // 解码          String reText = QRCodeUtils.qrCodeDecode(qrFile);          System.out.println(reText);      }  }    class J2SEImage implements QRCodeImage {      BufferedImage image;        public J2SEImage(BufferedImage image) {          this.image = image;      }        public int getWidth() {          return image.getWidth();      }        public int getHeight() {          return image.getHeight();      }        public int getPixel(int x, int y) {          return image.getRGB(x, y);      }  }

 

转载于:https://www.cnblogs.com/Sandheart/p/7568969.html

你可能感兴趣的文章
vim在同一个窗口中同时编辑多个文件
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
Linux相关——记一些ubuntu相关快捷键&操作(持续更新)
查看>>
口胡:[HNOI2011]数学作业
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
Java中写文件操作
查看>>
js,jquery,css,html5特效
查看>>
python 进程池Pool以及Queue的用法
查看>>
while 循环、格式化输出、运算符
查看>>
Combination Sum III -- leetcode
查看>>
中国剩余定理
查看>>
MongoDB一些基本的命令
查看>>
尚未为数据源“RptDataSet_StatEC”提供数据源实例
查看>>
Linux 分区挂载方案
查看>>
【快速幂】2011
查看>>
枚举类型或运算
查看>>
SpringBoot自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面、webmvcconfigureradapter过时问题...
查看>>
maven学习笔记——1.helloword示例
查看>>
Android 将从网络获取的数据缓存到私有文件
查看>>
hibernate操作mysql插入修改中文出现乱码
查看>>