本文(2019年6月29日 飞快的蜗牛博客)
有时候,男人和女人是两个完全不同的世界,男人的玩笑和女人的玩笑也完全是两码事,爱的人完全不了解你,你也不要指望一个女人了解你,所以男的不是要求别人怎么样,是要求自己怎么样,男人更应该对自己好点,照顾好自己是最基本的,
不然你怎么照顾别人,男人是竞争的产物不是吗?
言归正传:
首先加入依赖我的目前依赖是:
<!-- 二维码生成 --><dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.4.0</version></dependency>
第一步:
1】写工具类,宽度,高度这里写死的,我是觉得前台可控制,你自己也可以修改自己想要的
package com.xxff.util; import com.google.zxing.*;import com.google.zxing.client.j2se.BufferedImageLuminanceSource;import com.google.zxing.common.BitMatrix;import com.google.zxing.common.HybridBinarizer;import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import javax.imageio.ImageIO;import java.awt.*;import java.awt.geom.RoundRectangle2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.OutputStream;import java.util.Hashtable; public class QRCodeUtil { private static final String CHARSET = "utf-8"; private static final String FORMAT_NAME = "JPG"; // 二维码尺寸 private static final int QRCODE_SIZE = 300; // LOGO宽度 private static final int WIDTH = 60; // LOGO高度 private static final int HEIGHT = 60; private static BufferedImage createImage(String content, String imgPath, boolean needCompress) throws Exception { Hashtable hints = new Hashtable(); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); hints.put(EncodeHintType.CHARACTER_SET, CHARSET); hints.put(EncodeHintType.MARGIN, 1); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints); int width = bitMatrix.getWidth(); int height = bitMatrix.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, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF); } } if (imgPath == null || "".equals(imgPath)) { return image; } // 插入图片 QRCodeUtil.insertImage(image, imgPath, needCompress); return image; } private static void insertImage(BufferedImage source, String imgPath, boolean needCompress) throws Exception { File file = new File(imgPath); if (!file.exists()) { System.err.println("" + imgPath + " 该文件不存在!"); return; } Image src = ImageIO.read(new File(imgPath)); int width = src.getWidth(null); int height = src.getHeight(null); if (needCompress) { // 压缩LOGO if (width > WIDTH) { width = WIDTH; } if (height > HEIGHT) { height = HEIGHT; } Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(image, 0, 0, null); // 绘制缩小后的图 g.dispose(); src = image; } // 插入LOGO Graphics2D graph = source.createGraphics(); int x = (QRCODE_SIZE - width) / 2; int y = (QRCODE_SIZE - height) / 2; graph.drawImage(src, x, y, width, height, null); Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6); graph.setStroke(new BasicStroke(3f)); graph.draw(shape); graph.dispose(); } public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress); mkdirs(destPath); // String file = new Random().nextInt(99999999)+".jpg"; // ImageIO.write(image, FORMAT_NAME, new File(destPath+"/"+file)); ImageIO.write(image, FORMAT_NAME, new File(destPath)); } public static BufferedImage encode(String content, String imgPath, boolean needCompress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress); return image; } public static void mkdirs(String destPath) { File file = new File(destPath); // 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常) if (!file.exists() && !file.isDirectory()) { file.mkdirs(); } } public static void encode(String content, String imgPath, String destPath) throws Exception { QRCodeUtil.encode(content, imgPath, destPath, false); } // 被注释的方法 /* * public static void encode(String content, String destPath, boolean * needCompress) throws Exception { QRCodeUtil.encode(content, null, destPath, * needCompress); } */ public static void encode(String content, String destPath) throws Exception { QRCodeUtil.encode(content, null, destPath, false); } public static void encode(String content, String imgPath, OutputStream output, boolean needCompress) throws Exception { BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress); ImageIO.write(image, FORMAT_NAME, output); } public static void encode(String content, OutputStream output) throws Exception { QRCodeUtil.encode(content, null, output, false); } public static String decode(File file) throws Exception { BufferedImage image; image = ImageIO.read(file); if (image == null) { return null; } BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Result result; Hashtable hints = new Hashtable(); hints.put(DecodeHintType.CHARACTER_SET, CHARSET); result = new MultiFormatReader().decode(bitmap, hints); String resultStr = result.getText(); return resultStr; } public static String decode(String path) throws Exception { return QRCodeUtil.decode(new File(path)); } }
第二步:测试
2】可直接微信扫描结果测试
package com.xxff.util; public class QrCodeTest { public static void main(String[] args) throws Exception { // 存放在二维码中的内容 String text = "我是小铭"; // 嵌入二维码的图片路径 String imgPath = "C:/Users/DELL01/Desktop/图片/宋世杰.jpg"; // 生成的二维码的路径及名称 String destPath = "C:/Users/DELL01/Desktop/图片/jam.jpg"; //生成二维码 QRCodeUtil.encode(text, imgPath, destPath, true); // 解析二维码 String str = QRCodeUtil.decode(destPath); // 打印出解析出的内容 System.out.println(str); } }
第三步:controller 控制器
3】controller 控制器
package com.xxff.controller; import com.xxff.util.QRCodeUtil;import com.xxff.util.UUID;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse;import java.io.File; /** * 二维码生成器,支持中文 * */@RestController@RequestMapping("/QRcode")public class QRcodeController { /** * 指定存储路径,这里是你自己配置的项目磁盘路径 */ @Value(value="${application.profile}") private String profile; /** * 1.嵌入二维码的图片路径,要把嵌入二维码的图片提前放到D:/xxffprofile/qrcode/该路径下, * 并起名称为qrcode.jpg * 2.如果图片名称为空,那么就会生成一个纯净的二维码 */ String imgPath = "qrcode.jpg"; // 生成的二维码的路径 String destPath = profile+"qrcode/"; @RequestMapping("/createQRcode") public String createQRcode(HttpServletResponse response,String contents) throws Exception{ //嵌入图片 File testFile = new File(destPath+imgPath); //目标文件夹 File filebag = new File(destPath); //文件夹是否存在,不存在就创建 if (!filebag.exists()) { filebag.mkdirs(); } String qrImgPath = ""; //二维码嵌入图片是否存在,不存在就生成纯净的二维码图片 if(testFile.exists()){ qrImgPath = destPath+imgPath; } String newName = UUID.getUUID()+".jpg"; destPath += newName; //生成二维码 QRCodeUtil.encode(contents, qrImgPath, destPath, true); String rpath = "qrcode/"+newName; return rpath; }} 如果觉得好,请给个赞或好评,尊重写文辛苦,不轻易转载~~~多谢!
原文地址:https://www.cnblogs.com/luojiesheng/p/11106107.html
时间: 2024-10-05 23:47:49