Java使用Google依赖生成二维码

 一、导入依赖

<dependencies>
    <dependency>
      <groupId>com.google.zxing</groupId>
      <artifactId>core</artifactId>
      <version>3.4.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.zxing</groupId>
      <artifactId>javase</artifactId>
      <version>3.4.0</version>
    </dependency>
</dependencies>

二、生成/解析二维码

public class QRCodeUtil {

    //二维码宽度,单位像素
    private static final int CODE_WIDTH = 400;
    //二维码高度,单位像素
    private static final int CODE_HEIGHT = 400;
    //二维码图片格式
    private static final String FORMAT = "jpg";
    //编码格式
    private static final String CHARSET = "UTF-8";
    //默认二维码文件夹路径
    private static final String DEFAULT_FILE_DIR = "E:/tmp/qrcode/";

    //二维码参数
    private static Map<EncodeHintType, Object> hints = new HashMap();

    static{
        //设置字符编码类型
        hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
        //设置纠错等级L/M/Q/H,纠错等级越高越不易识别,当前设置等级为最高等级H
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        //设置二维码边距,单位像素,值越小二维码距离四周越近
        hints.put(EncodeHintType.MARGIN, 1);
    }

    //------------------------------生成二维码------------------------------

    /**
     * 生成二维码,写入文件
     * @param codeContent 二维码内容
     * @param fileName 文件名称
     * @return
     */
    public static String createQRFile(String codeContent, String fileName) throws Exception {
        File file = new File(DEFAULT_FILE_DIR, fileName + "." + FORMAT);
        //生成并保存二维码图片文件
        BitMatrix bitMatrix = new MultiFormatWriter().encode(codeContent, BarcodeFormat.QR_CODE, CODE_WIDTH, CODE_HEIGHT, hints);
        MatrixToImageWriter.writeToPath(bitMatrix, FORMAT, file.toPath());
        return file.getPath();
    }

    /**
     * 生成二维码,写入输出流(例如:response.getOutputStream())
     * @param codeContent 二维码内容
     * @param out 输出流
     */
    public static void createQROutput(String codeContent, OutputStream out) throws Exception {
        BitMatrix bitMatrix = new MultiFormatWriter().encode(codeContent, BarcodeFormat.QR_CODE, CODE_WIDTH, CODE_HEIGHT, hints);
        MatrixToImageWriter.writeToStream(bitMatrix, FORMAT, out);
    }

    //------------------------------解析二维码------------------------------

    /**
     * 解析二维码文件
     * @param filePath 文件路径
     * @return
     */
    public static String parseQRFile(String filePath) throws Exception {
        File file = new File(filePath);
        if (file == null || !file.exists() || file.isDirectory()) {
            return null;
        }
        BufferedImage bufferedImage = ImageIO.read(file);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(bufferedImage)));
        Hashtable hints = new Hashtable();
        hints.put(DecodeHintType.CHARACTER_SET, CHARSET);
        Result result = new MultiFormatReader().decode(bitmap, hints);
        return result.getText();
    }

    /**
     * 解析网络URL二维码
     * @param urlPath 二维码图片网络地址
     * @return
     */
    public static String parseQRUrl(String urlPath) throws Exception {
        URL url = new URL(urlPath);
        BufferedImage bufferedImage = ImageIO.read(url);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(bufferedImage)));
        Hashtable hints = new Hashtable();
        hints.put(DecodeHintType.CHARACTER_SET, CHARSET);
        Result result = new MultiFormatReader().decode(bitmap, hints);
        return result.getText();
    }

}

注意:若想生成条形码,则只需修改 BarcodeFormat.QR_CODE为 BarcodeFormat.CODE_128,再修改图形长宽为(500, 250)即可

使用Java生成二维码,你可以依赖Googlezxing类库。这个类库提供了二维码生成的策略,你只需要调用它的API来生成二维码对象。首先,你需要准备以下信息:字符串内容、二维码的宽度和高度、字符集、颜色、外边距和纠错等级等。在zxing包中的MultiFormatWriter类是生成二维码的核心工具类,你可以使用它的encode方法将要封装的字符串内容转化为二维码对象。 以下是生成二维码的步骤: 步骤1:导入zxing类库,并创建MultiFormatWriter对象。 步骤2:创建一个Map集合,用于存储参数,包括字符集和二维码类型。 步骤3:调用MultiFormatWriter对象的encode方法,传入字符串内容和参数Map,将其转化为二维码对象。 步骤4:将二维码对象写入磁盘或输出流,以保存或展示二维码。 下面是一个简单的Java代码示例,演示了如何使用zxing生成二维码: ``` import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class QRCodeGenerator { public static void main(String[] args) { String content = "Hello, World!"; // 二维码内容 int width = 300; // 二维码宽度 int height = 300; // 二维码高度 String charset = "UTF-8"; // 字符集 // 设置参数 Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, charset); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 纠错等级为高 try { // 生成二维码 BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); // 创建BufferedImage对象,并设置颜色模式 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); image.createGraphics(); // 设置二维码颜色 Graphics2D graphics = (Graphics2D) image.getGraphics(); graphics.setColor(Color.WHITE); graphics.fillRect(0, 0, width, height); graphics.setColor(Color.BLACK); // 绘制二维码 for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { if (matrix.get(i, j)) { graphics.fillRect(i, j, 1, 1); } } } // 保存二维码到磁盘 ImageIO.write(image, "png", new File("qrcode.png")); System.out.println("二维码已生成并保存到qrcode.png文件中。"); } catch (Exception e) { e.printStackTrace(); } } } ``` 这段代码将生成一个内容为"Hello, World!"的二维码,并保存到名为qrcode.png的文件中。你可以根据自己的需求调整代码中的参数,来生成不同样式的二维码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Java利用zxing生成二维码](https://blog.csdn.net/qq_43598138/article/details/105444641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Java利用Zxing生成二维码的简单实例](https://download.csdn.net/download/weixin_38598703/12794633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值