快速使用Java生成以及解析二维码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_33909701/article/details/98740858

步骤 1 : 下载第三方jar包

生成和解析二维码需要用到第三方的包: QRCODE.jar。 在下载区(点击进入)可以下载

步骤 2 : 代码

二维码如何实现不用关心,只用关心两个方法:
把字符串写进二维码,并且生成图片到destFile


public static void qrCodeEncode(String encodeddata, File destFile)


把二维码信息从imageFile中读取出来


public static String qrCodeDecode(File imageFile)


主方法里就是实例,把字符串写进了qrcode.png,同时从qrcode.png里解析出字符串来

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.io.UnsupportedEncodingException;



import javax.imageio.ImageIO;



import com.swetake.util.Qrcode;



import jp.sourceforge.qrcode.QRCodeDecoder;

import jp.sourceforge.qrcode.data.QRCodeImage;

import jp.sourceforge.qrcode.exception.DecodingFailedException;



public class QRCodeUtil {



     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; 

        } 

       

        static 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); 

            } 

        } 

         

        public static void main(String[] args) { 

            String filePath = "d:/qrcode.png"; 

            File qrFile = new File(filePath); 

       

            // 二维码内容 

            String encodeddata = "http://how2j.cn"; 

            try { 

                QRCodeUtil.qrCodeEncode(encodeddata, qrFile); 

            } catch (IOException e) { 

                e.printStackTrace(); 

            } 

       

            // 解码 

            String reText = QRCodeUtil.qrCodeDecode(qrFile); 

            System.out.println(reText); 

        } 

}

步骤 3 : 可运行项目

下载区(点击进入)有本知识点对应的可运行项目下载 ,实在自己搞不出来,就下载解压出来比较一下。


更多内容,点击了解: http://how2j.cn/k/qrcode/qrcode-java-qrcode/1635.html

猜你喜欢

转载自blog.csdn.net/qq_33909701/article/details/98740858