JAVA根据URL、跳转链接,生成二维码,海报二维码

您所在的位置:网站首页 java二维码图片生成方法有哪些呢 JAVA根据URL、跳转链接,生成二维码,海报二维码

JAVA根据URL、跳转链接,生成二维码,海报二维码

2024-07-05 01:48| 来源: 网络整理| 查看: 265

1、导入ZXing包 1.1什么是ZXing

ZXing是一个开源的类库,是用Java编写的多格式的1D / 2D条码图像处理库,使用ZXing可以生成、识别QR Code(二维码)。常用的二维码处理库还有zbar,近几年已经不再更新代码,下边介绍ZXing生成二维码的方法。

1.2打开对应的对应pom文件把下面的坐标地址复制进去

引入依赖

com.google.zxing core 3.4.1 com.google.zxing javase 3.4.1 2、创建生成二维码、海报二维码的工具类

创建二维码功能使用较多,我们一般把它生成为工具类放在公共模块中,方便其他模块进行调用。

2.1说明         2.1.1二维码在海报中的位置调整、如果只生成二维码请略过

        //二维码在海报中的X坐标         int qrCodeX = 183;     该参数是调整二维码在海报中的左右位置         // 二维码在海报中的Y坐标         int qrCodeY = 533;     该参数是调整二维码在海报中的上下位置

        2.1.2返回值说明

        生成海报二维码的方法的返回值为Base64,如想返回二进制或其他请自己修改代码即可

        生成普通二维码的方法的返回值为二进制图片,如想返回Base64,拿到二进制数据,在调用转Base64数据的方法即可

        2.1.3二维码的白边宽度调整

        调整二维码四周白边的宽度的方法:

         在下面代码中的getDecodeHintTyp()方法中如下:

        // 设置边距为1         hints.put(EncodeHintType.MARGIN, 0);

import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URL; import java.util.Base64; public class QRCodeUtil { /* * 获取海报二维码图片调用getPostQrCode(),默认返回Base64格式 * 只根据跳转链接生成二维码调用getQrCodeImag(),如果需要转换为base64拿到返回值后调用convertImageToBase64() */ public static void main(String[] args) throws WriterException { // 海报图片链接 String posterImageLink = "海报二维码图片链接"; // 二维码链接 String qrCodeLink = "扫码生成的二维码之后的跳转地址"; // 二维码宽度 int qrCodeWidth = 190; // 二维码高度 int qrCodeHeight = 190; // 二维码在海报中的X坐标 int qrCodeX = 183; // 二维码在海报中的Y坐标 int qrCodeY = 533; BufferedImage qrCodeImage = getQrCodeImage(qrCodeLink, qrCodeWidth, qrCodeHeight); String base64QrCode = convertImageToBase64(qrCodeImage); System.out.println(base64QrCode); } /** * 获取海报二维码图片 * @param posterImageLink 海报图片链接 * @param qrCodeLink 二维码跳转链接 * @param qrCodeWidth 二维码宽度 * @param qrCodeHeight 二维码高度 * @param qrCodeX 二维码在海报中的X坐标 * @param qrCodeY 二维码在海报中的Y坐标 * @return 海报二维码图片Base64字符串 */ public static String getPostQrCode(String posterImageLink, String qrCodeLink, int qrCodeWidth, int qrCodeHeight, int qrCodeX, int qrCodeY) { try { // 下载海报图片 URL posterURL = new URL(posterImageLink); BufferedImage posterImage = ImageIO.read(posterURL); // 将海报图片转换为RGB色彩模式 posterImage = convertToRGB(posterImage); BufferedImage qrCodeImage = getQrCodeImage(qrCodeLink, qrCodeWidth, qrCodeHeight); // 将二维码嵌入到海报中 Graphics2D graphics = posterImage.createGraphics(); graphics.drawImage(qrCodeImage, qrCodeX, qrCodeY, null); graphics.dispose(); // 将海报转换为Base64格式 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(posterImage, "jpg", outputStream); byte[] posterData = outputStream.toByteArray(); String base64Poster = Base64.getEncoder().encodeToString(posterData); // 添加Base64前缀 base64Poster = "data:image/jpeg;base64," + base64Poster; // 输出Base64格式的海报图片 return base64Poster; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 根据跳转链接获取二维码图片 * @param qrCodeLink 二维码跳转链接 * @param qrCodeWidth 二维码宽度 * @param qrCodeHeight 二维码高度 * @return 二维码图片 */ public static BufferedImage getQrCodeImage(String qrCodeLink, int qrCodeWidth, int qrCodeHeight) throws WriterException { // 生成二维码 MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); // 设置二维码参数 BitMatrix bitMatrix = multiFormatWriter.encode(qrCodeLink, BarcodeFormat.QR_CODE, qrCodeWidth, qrCodeHeight, getDecodeHintType()); BufferedImage qrCodeImage = toBufferedImage(bitMatrix); // 将二维码图片转换为RGB色彩模式 qrCodeImage = convertToRGB(qrCodeImage); return qrCodeImage; } // 获取二维码的编码参数 private static java.util.Map getDecodeHintType() { java.util.Map hints = new java.util.HashMap(); // 设置字符集 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置容错级别为高 hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 设置边距为1 hints.put(EncodeHintType.MARGIN, 0); return hints; } // 将BitMatrix转换为BufferedImage 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) ? Color.BLACK.getRGB() : Color.WHITE.getRGB()); } } return image; } // 将图片转换为RGB色彩模式 private static BufferedImage convertToRGB(BufferedImage image) { BufferedImage rgbImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g = rgbImage.createGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); return rgbImage; } /** * 将图片转换为Base64字符串 * @param image BufferedImage * @return Base64字符串 */ public static String convertImageToBase64(BufferedImage image){ try { // 1. 将BufferedImage写入ByteArrayOutputStream ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "png", baos); // 可以选择其他格式,如"jpg" byte[] imageBytes = baos.toByteArray(); // 2. 将字节数组编码为Base64字符串 return "data:image/png;base64," + Base64.getEncoder().encodeToString(imageBytes); } catch (IOException e) { e.printStackTrace(); } return null; } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3