java生成二维码工具类

java生成二维码工具类

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daochuwenziyao/article/details/72312431

如下为java生成二维码工具类,可以选择生成文件,或者直接在页面生成

 

  1. import java.awt.image.BufferedImage;

  2. import java.io.File;

  3. import java.io.IOException;

  4. import java.nio.file.FileSystems;

  5. import java.util.HashMap;

  6. import java.util.Map;

  7.  
  8. import javax.imageio.ImageIO;

  9. import javax.servlet.http.HttpServletResponse;

  10.  
  11. import org.slf4j.Logger;

  12. import org.slf4j.LoggerFactory;

  13.  
  14. import com.alibaba.fastjson.JSONObject;

  15. import com.google.zxing.BarcodeFormat;

  16. import com.google.zxing.Binarizer;

  17. import com.google.zxing.BinaryBitmap;

  18. import com.google.zxing.DecodeHintType;

  19. import com.google.zxing.EncodeHintType;

  20. import com.google.zxing.LuminanceSource;

  21. import com.google.zxing.MultiFormatReader;

  22. import com.google.zxing.MultiFormatWriter;

  23. import com.google.zxing.NotFoundException;

  24. import com.google.zxing.Result;

  25. import com.google.zxing.WriterException;

  26. import com.google.zxing.client.j2se.BufferedImageLuminanceSource;

  27. import com.google.zxing.client.j2se.MatrixToImageWriter;

  28. import com.google.zxing.common.BitMatrix;

  29. import com.google.zxing.common.HybridBinarizer;

  30.  
  31. /**

  32. *

  33. * 二维码工具类

  34. * @see [相关类/方法]

  35. * @since [产品/模块版本]

  36. */

  37. public class QRCodeUtil

  38. {

  39.  
  40. private static final Logger log = LoggerFactory.getLogger(QRCodeUtil.class);

  41.  
  42.  
  43. /**

  44. *

  45. * 生成二维码文件测试

  46. * @param filePath 文件路径

  47. * @param fileName 文件名

  48. * @param number 编号

  49. * @param phone 手机号

  50. * @see [类、类#方法、类#成员]

  51. */

  52. public static void generatEncodeTest(String filePath, String fileName, String number, String phone)

  53. {

  54.  
  55. int width = 200; // 图像宽度

  56. int height = 200; // 图像高度

  57. String format = "png";// 图像类型

  58.  
  59. JSONObject json = new JSONObject();

  60. json.put("number",number);

  61. json.put("phone", phone);

  62. String content = json.toJSONString();// 内容

  63.  
  64. Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();

  65. hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

  66.  
  67. try

  68. {

  69. BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵

  70. String path = FileSystems.getDefault().getPath(filePath, fileName).toString();

  71. File file = new File(path);

  72. MatrixToImageWriter.writeToFile(bitMatrix, format, file);// 输出图像

  73. System.out.println("二维码输出成功");

  74. System.out.println("图片地址:" + filePath + fileName);

  75. System.out.println("---------------------------");

  76. }

  77. catch (WriterException e)

  78. {

  79. e.printStackTrace();

  80. System.out.println("二维码输出异常");

  81. }

  82. catch (IOException e)

  83. {

  84. e.printStackTrace();

  85. System.out.println("二维码输出异常");

  86. }

  87. }

  88.  
  89. /**

  90. *

  91. * 解析二维码内容测试

  92. * @param filePath 二维码绝对路径

  93. * @see [类、类#方法、类#成员]

  94. */

  95. public static void parseDecodeTest(String filePath)

  96. {

  97. BufferedImage image;

  98. try

  99. {

  100. image = ImageIO.read(new File(filePath));

  101. LuminanceSource source = new BufferedImageLuminanceSource(image);

  102. Binarizer binarizer = new HybridBinarizer(source);

  103. BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);

  104.  
  105. Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();

  106. hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");

  107.  
  108. Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码

  109. JSONObject content = JSONObject.parseObject(result.getText());

  110.  
  111. StringBuffer sb = new StringBuffer();

  112. sb.append("编号:")

  113. .append(content.getString("number"))

  114. .append("\r\n")

  115. .append("手机号码:")

  116. .append(content.getString("phone"));

  117. String returnText = sb.toString();

  118. System.out.println(returnText);

  119. }

  120. catch (IOException e)

  121. {

  122. e.printStackTrace();

  123. }

  124. catch (NotFoundException e)

  125. {

  126. e.printStackTrace();

  127. }

  128. }

  129.  
  130.  
  131. /**

  132. *

  133. * 生成二维码输出流

  134. * 在jsp页面中直接展示时使用

  135. * 无须保存 即生成即展示

  136. * @param response

  137. * @param number 编号

  138. * @param phone 手机号

  139. * @see [类、类#方法、类#成员]

  140. */

  141. public static void generatEncode(HttpServletResponse response, String number, String phone)

  142. {

  143. JSONObject json = new JSONObject();

  144. json.put("number",number);

  145. json.put("phone", phone);

  146. String content = json.toJSONString();// 内容

  147.  
  148. int width = 200; // 图像宽度

  149. int height = 200; // 图像高度

  150. String format = "png";// 图像类型

  151.  
  152. Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();

  153. hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");

  154.  
  155. try

  156. {

  157.  
  158. BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵

  159. MatrixToImageWriter.writeToStream(bitMatrix, format, response.getOutputStream());// 输出图像

  160. log.info("二维码输出成功");

  161. }

  162. catch (WriterException e)

  163. {

  164. e.printStackTrace();

  165. log.error("二维码输出异常");

  166. }

  167. catch (IOException e)

  168. {

  169. e.printStackTrace();

  170. log.error("二维码输出异常");

  171. }

  172. }

  173.  
  174. public static void main(String[] args)

  175. {

  176. generatEncodeTest("D:\\","zxing.png","001","13019931996");

  177. parseDecodeTest("D:\\zxing.png");

  178. }

  179. }

  180.  
  181.  

 

Java生成二维码

2017年11月17日 22:18:13 孙百度 阅读数:199

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sun123_123/article/details/78565768


java生成二维码

本文通过Java提供两种生成二维码以及解析二维码的方法

1.zxing

编码前准备:

  1. 下载zxing,下载后提取出core,javase中com文件夹下的文件自己打成jar包,供一会使用。zxing源码下载
  2. jdk版本:1.7及以上
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 使用zxing生成二维码
 * 
 * @author suny
 */
public class CreateQRcode {

    public static void main(String[] args) {
        // 定义二维码图片参数
        int width = 300;
        int height = 300;
        String format = "jpg";
        String content = "www.baidu.com";

        // 定义二维码的参数
        HashMap<EncodeHintType, Object> map = new HashMap<EncodeHintType, Object>();
        // 定义二维码字符集
        map.put(EncodeHintType.CHARACTER_SET, "utf-8");
        // 纠错等级
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        // 边距
        map.put(EncodeHintType.MARGIN, 2);

        /*
         * content:二维码内容 format:二维码类型
         */
        try {
            // 生成二维码
            BitMatrix bitmatrix = new MultiFormatWriter().encode(content,
                    BarcodeFormat.QR_CODE, width, height, map);
            Path file = new File("E:/img.jpg").toPath();
            MatrixToImageWriter.writeToPath(bitmatrix, format, file);

        } catch (Exception e) {
            e.printStackTrace();
        } 

    }
}


import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

/**
 * 使用zxing解析二维码
 * @author suny
 */
public class ReadQRcode {

    public static void main(String[] args) {
        try {
            MultiFormatReader multiFormatReader = new MultiFormatReader();
            File file = new File("E:/img.jpg");
            // 读取文件识别成为一张图片
            BufferedImage image = ImageIO.read(file);

            BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
                    new BufferedImageLuminanceSource(image)));

            // 定义二维码的参数
            HashMap map = new HashMap();
            // 定义二维码字符集
            map.put(EncodeHintType.CHARACTER_SET, "utf-8");
            Result result = multiFormatReader.decode(binaryBitmap, map);
            System.out.println("解析结果:"+result.toString());
            System.out.println("二维码格式:"+result.getBarcodeFormat());
            System.out.println("二维码格式:"+result.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93

2.qrcode

编码前准备:
1. 下载qrcode生成包。qrcode生成包
2. 下载qrcode读取包。qrcode读取包
3. jdk版本:1.7及以上

/*
 *created by2017年11月17日
 */
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;

/**
 * 使用qrcode生成二维码
 * 
 * @author suny
 */
public class CreateQRcode {

    public static void main(String[] args) throws IOException {
        Qrcode x = new Qrcode();
        x.setQrcodeErrorCorrect('M');// 纠错等级
        x.setQrcodeEncodeMode('B');// M代表数字;A代表a-Z;B代表任意字符
        x.setQrcodeVersion(7);// 版本
        String qrData = "www.baidu.com";
        // 规定尺寸
        int width = 67 + 12 * (7 - 1);
        int height = 67 + 12 * (7 - 1);
        // 创建一个缓冲区图片
        BufferedImage bufferedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        // Java提供的画图工具
        Graphics2D gs = bufferedImage.createGraphics();
        gs.setBackground(Color.WHITE);
        gs.setColor(Color.BLACK);
        // 清除画板内容
        gs.clearRect(0, 0, width, height);
        // 将文本转换成字节数
        byte[] d = qrData.getBytes();

        int pixoff = 2;// 偏移量
        // 进行填充
        if (d.length > 0 && d.length < 120) {

            boolean[][] s = x.calQrcode(d);

            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < s.length; j++) {
                    if (s[j][i]) {
                        gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        }
        gs.dispose();
        bufferedImage.flush();

        ImageIO.write(bufferedImage, "jpg", new File("E:/aa.jpg"));
        System.out.println("生成成功");

    }

}


/*
 *created by2017年11月17日
 */
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
/**
 * 使用qrcode解析二维码
 * @author sunyi
 */
public class ReadQRcode {

    public static void main(String[] args) throws IOException {
        File file = new File("E:/aa.jpg");
        // 读取文件识别成为一张图片
        BufferedImage image = ImageIO.read(file);

        QRCodeDecoder codeDecoder = new QRCodeDecoder();

        String rs = new String(codeDecoder.decode(new QRcodeImage_Test(image)));

        System.out.println(rs);
    }

}
/*
 *created by2017年11月17日
 */
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
/**
 * 
 * @author suny
 */
public class QRcodeImage_Test implements QRCodeImage {

    BufferedImage image;
    public QRcodeImage_Test(BufferedImage image) {
        this.image = image;
    }


    @Override
    public int getHeight() {

        return image.getHeight();
    }


    @Override
    public int getPixel(int arg0, int arg1) {
        return image.getRGB(arg0, arg1);
    }


    @Override
    public int getWidth() {
        return image.getWidth();
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值