Java后台直接生成二维码

1、其实jquery也可以直接生成二维码的,但我测试的时候,二维码生成后太模糊,难以识别。所以在这里介绍在后来生成二维码的方式。

2、不善于文字描述,直接上代码了。

import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.google.zxing.BarcodeFormat;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;/*** <p>Title:QRCodeUtil </p>* <p>Description: 二维码生成工具类</p>* @author Administrator* @version * @since */
public final class QRCodeUtil extends LuminanceSource {private static final Logger logger = LoggerFactory.getLogger(QRCodeUtil.class);// 二维码颜色private static final int BLACK = 0xFF000000;// 二维码颜色private static final int WHITE = 0xFFFFFFFF;private final BufferedImage image;private final int left;private final int top;public QRCodeUtil(BufferedImage image) {this(image, 0, 0, image.getWidth(), image.getHeight());}public QRCodeUtil(BufferedImage image, int left, int top, int width, int height) {super(width, height);int sourceWidth = image.getWidth();int sourceHeight = image.getHeight();if (left + width > sourceWidth || top + height > sourceHeight) {throw new IllegalArgumentException("Crop rectangle does not fit within image data.");}for (int y = top; y < top + height; y++) {for (int x = left; x < left + width; x++) {if ((image.getRGB(x, y) & 0xFF000000) == 0) {image.setRGB(x, y, 0xFFFFFFFF); // = white}}}this.image = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_BYTE_GRAY);this.image.getGraphics().drawImage(image, 0, 0, null);this.left = left;this.top = top;}@Overridepublic byte[] getRow(int y, byte[] row) {if (y < 0 || y >= getHeight()) {throw new IllegalArgumentException("Requested row is outside the image: " + y);}int width = getWidth();if (row == null || row.length < width) {row = new byte[width];}image.getRaster().getDataElements(left, top + y, width, 1, row);return row;}@Overridepublic byte[] getMatrix() {int width = getWidth();int height = getHeight();int area = width * height;byte[] matrix = new byte[area];image.getRaster().getDataElements(left, top, width, height, matrix);return matrix;}@Overridepublic boolean isCropSupported() {return true;}@Overridepublic LuminanceSource crop(int left, int top, int width, int height) {return new QRCodeUtil(image, this.left + left, this.top + top, width, height);}@Overridepublic boolean isRotateSupported() {return true;}@Overridepublic LuminanceSource rotateCounterClockwise() {int sourceWidth = image.getWidth();int sourceHeight = image.getHeight();AffineTransform transform = new AffineTransform(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth);BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, BufferedImage.TYPE_BYTE_GRAY);Graphics2D g = rotatedImage.createGraphics();g.drawImage(image, transform, null);g.dispose();int width = getWidth();return new QRCodeUtil(rotatedImage, top, sourceWidth - (left + width), getHeight(), width);}/*** @param matrix* @return*/private static BufferedImage toBufferedImage(BitMatrix matrix) {int width = matrix.getWidth();int height = matrix.getHeight();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);}}return image;}/*** 生成二维码图片* * @param matrix* @param format* @param file* @throws IOException*/public static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {BufferedImage image = toBufferedImage(matrix);if (!ImageIO.write(image, format, file)) {throw new IOException("Could not write an image of format " + format + " to " + file);}}/*** 生成二维码图片流* * @param matrix* @param format* @param stream* @throws IOException*/public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) throws IOException {BufferedImage image = toBufferedImage(matrix);if (!ImageIO.write(image, format, stream)) {throw new IOException("Could not write an image of format " + format);}}/*** 根据内容,生成指定宽高、指定格式的二维码图片** @param text   内容* @param width  宽* @param height 高* @param format 图片格式* @return 生成的二维码图片路径* @throws Exception*/private static String generateQRCode(String text, int width, int height, String format, String pathName)throws Exception {Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 指定编码格式hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);// 指定纠错等级hints.put(EncodeHintType.MARGIN, 1); // 白边大小,取值范围0~4BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);File outputFile = new File(pathName);writeToFile(bitMatrix, format, outputFile);return pathName;}/*** 输出二维码图片流* * @param text 二维码内容* @param width 二维码宽* @param height 二维码高* @param format 图片格式eg: png, jpg, gif* @param response HttpServletResponse* @throws Exception*/public static void generateQRCode(String text, int width, int height, String format, HttpServletResponse response)throws Exception {Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 指定编码格式hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);// 指定纠错等级hints.put(EncodeHintType.MARGIN, 1); // 白边大小,取值范围0~4BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);writeToStream(bitMatrix, format, response.getOutputStream());}/*** 解析指定路径下的二维码图片** @param filePath 二维码图片路径* @return*/public static String parseQRCode(String filePath) {String content = "";try {File file = new File(filePath);BufferedImage image = ImageIO.read(file);LuminanceSource source = new QRCodeUtil(image);Binarizer binarizer = new HybridBinarizer(source);BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");MultiFormatReader formatReader = new MultiFormatReader();Result result = formatReader.decode(binaryBitmap, hints);logger.info("result 为:" + result.toString());logger.info("resultFormat 为:" + result.getBarcodeFormat());logger.info("resultText 为:" + result.getText());// 设置返回值content = result.getText();} catch (Exception e) {logger.error(e.getMessage());}return content;}public static void main(String[] args) {String text = "hello world!"; // 随机生成验证码System.out.println("随机码: " + text);int width = 100; // 二维码图片的宽int height = 100; // 二维码图片的高String format = "png"; // 二维码图片的格式try {// 生成二维码图片,并返回图片路径String pathName = generateQRCode(text, width, height, format, "D:/new.png");System.out.println("生成二维码的图片路径: " + pathName);String content = parseQRCode(pathName);System.out.println("解析出二维码的图片的内容为: " + content);} catch (Exception e) {e.printStackTrace();}}}
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>

转载于:https://www.cnblogs.com/zhuhui-site/p/10091163.html

Java后台直接生成二维码介绍相关推荐

  1. java后台实现生成二维码并且上传的详细介绍

    个人博客传送门 今天又遇到了新的问题,就是后台需要生成一个二维码,以前从来没有做过这个二维码,通过上午的努力,总算是完成了,希望有兴趣的可以一起交流学习.我用的是google.zxing的这个插件来完 ...

  2. java实现后台直接生成二维码图片并直接上传到七牛云上面

    java实现后台直接生成二维码图片并直接上传到七牛云上面 需求:后台是直接根据唯一核销码生成图片,然后的话直接上传到七牛云,数据库只是保存地址,一开始也想错了,想成了创建临时文件存储生成的图片再上传到 ...

  3. java根据内容生成二维码

    java根据内容生成二维码 一.首先导入jar包:google.zxing.jar jar包可以从maven网站下载:meven仓库 这里可以找到你想要的绝大多数jar包,可以是依赖,也可以是jar包 ...

  4. java利用zxing生成二维码

    什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...

  5. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

  6. java使用zxing生成二维码,可带logo和底部文字

    java使用zxing生成二维码,可带logo和底部文字 springboot中整合zxing生成二维码 一.导入依赖 <properties><zxing.version>3 ...

  7. java学习-zxing生成二维码矩阵的简单例子

    这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...

  8. Java利用Zxing生成二维码及解析二维码内容

    前言 Java 操作二维码的开源项目很多,如 SwetakeQRCode.BarCode4j.Zxing 等等 本篇文章是介绍利用Zxing来生成二维码图片在web网页上展示,同时解析二维码图片. Z ...

  9. java如何批量生成二维码,并返回成压缩包形式?

    最近有点忙,现在稍微闲一些,就想写写最近遇到的一些业务. 业务:后台根据前端传入的需生成的数量,生成二维码图片并统一打包成压缩包返回. 效果图: 首先根据一定规则生成二维码字符串,然后返回成list( ...

  10. 使用Java、Servlet 生成二维码

    归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用.从候车亭.产品包装.家装卖场.汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们.随着智能手机的用户量日益增长,二维码的使用正在呈指 ...

最新文章

  1. 如何重新划分swap分区
  2. 5月22日 格式与布局
  3. 为什么启动hbase shell后,创建按create 'test', 'cf'失败?
  4. 休息一下,或者:如何使用Java 12制作出色的拼图游戏
  5. 基于corundumstudio建立websocket长连接
  6. idea新建类包图标_IntelliJ IDEA 常见文件类型的图标介绍
  7. python变量赋值方式_python变量和变量赋值的几种形式
  8. 50-10-010-配置-整体配置
  9. Spring的三大核心接口——BeanFactory、ApplicationContext、WebApplicationContext
  10. python list定义_Python中list总结
  11. 数据结构课程设计(二)---算术表达式求值
  12. 华为服务器SNMP协议怎么修改,华为迈普交换机、瑞斯康达SNMP协议配置方法
  13. 音乐指纹识别(一):音乐波形
  14. android:kotlin语言开发再也不用findViewById与ButterKnife
  15. IP地址在计算机的存储
  16. 单片机与上位机的串行通信
  17. win10系统vs2019 mpich配置
  18. ORA-00937: not a single-group group function
  19. ES6中Set方法实现数组去重
  20. 为什么手机网速太慢_为什么手机网速太慢

热门文章

  1. heartbeat 非联网安装(通过配置本地yum文件库安装heartbeat)
  2. 数据结构——二叉查找树
  3. intellij idea 程序包不可见问题
  4. 手动导入第三方工程/类库
  5. Typinator for mac(打字员)附注册码支持m1
  6. 前端基础学习之Html标签
  7. 易语言 — 数据类型
  8. method swizzling你应该注意的点
  9. nagios 流量监控和报警的shell脚本
  10. .net实现调用本地exe等应用程序的办法总结