JavaWeb 二维码

Posted Vmask

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb 二维码相关的知识,希望对你有一定的参考价值。

说明

相关包

zxing-core3.3
zxing-javase3.3
junit4.12

POM文件

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.0</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.0</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

相关代码

package com;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;

import org.junit.Test;

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.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.oned.Code128Writer;

public class Demo {
    static class ImageFormat {
        static final String PNG = "png";
        static final String GIF = "gif";
        static final String BMP = "bmp";
        static final String JPEG = "jpeg";
    }

    @Test
    public void qrcodeBuildTest() {
        // 输出目录
        String outPath = "d:\\demo\\";
        // 输出文件名
        String outName = "zxingDemo.png";
        // 生成内容
        String contents = "Qrcode Demo";
        Demo.qrCodeBuild(contents, outPath, outName, ImageFormat.PNG, 200, 200);
    }

    @Test
    public void barCodeBuildTest() {
        // 输出目录
        String outPath = "d:\\demo\\";
        // 输出文件名
        String outName = "zxingDemo.png";
        // 生成内容
        String contents = "barCode Demo";
        Demo.barCodeBuild(contents, outPath, outName, ImageFormat.PNG, 180, 60);
    }

    @Test
    public void qrCodeParseTest() {
        // String content = Demo.qrcodeParse("d:\\demo\\zxingDemo.png");
        String content = Demo.qrcodeParse(
                "http://dl2.iteye.com/upload/attachment/0103/0259/f1c4cf6c-c825-3504-8c9e-97019e3796d1.png");
        System.out.println(null == content ? "解析失败" : content);
    }

    /**
     * 二维码生成
     * 
     * @param contents
     *            文本内容
     * @param outPath
     *            输出目录
     * @param outName
     *            输出文件
     * @param format
     *            输出文件类型(png,jpeg...)
     * @param width
     *            生成图片宽度
     * @param height
     *            生成图片高度
     */
    public static void qrCodeBuild(String contents, String outPath, String outName, String format, int width,
            int height) {
        try {
            // 输出目录检测
            if (!new File(outPath).exists()) {
                new File(outPath).mkdirs();
            }
            Path path = FileSystems.getDefault().getPath(outPath, outName);

            // 相关配置(编码、白边)
            Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            hints.put(EncodeHintType.MARGIN, 1);

            // 生成
            BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);

            // 输出二维码
            MatrixToImageConfig config = new MatrixToImageConfig(0xFF000000, 0xFFFFFFFF);
            MatrixToImageWriter.writeToPath(matrix, format, path, config);
            // 输出为文件流(Web项目)
            // OutputStream stream = response.getOutputStream();
            // MatrixToImageWriter.writeToStream(matrix, format, stream,config);

            System.out.println("调试输出:OK");
        } catch (WriterException | IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 二维码解析
     * 
     * @param inPath
     *            二维码图片地址
     * @return 二维码文本内容
     */
    public static String qrcodeParse(String inPath) {

        // 文件检测
        if (!new File(inPath).exists()) {
            System.out.println("文件不存在:" + inPath);
            return null;
        }

        String content = "";
        try {

            // 读取图片
            BufferedImage image = ImageIO.read(new File(inPath));
            // 提取图片像素
            LuminanceSource source = new BufferedImageLuminanceSource(image);
            // 二值化(将灰度设置为0或255)
            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");

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

            // 获取文本
            content = result.getText();

            // 输出条形码类型(我使用的二维码,所以会输出QR_CODE)
            System.out.println(result.getBarcodeFormat());

        } catch (IOException | NotFoundException e) {
            e.printStackTrace();
        }
        return content;
    }

    /***
     * 一维码生成
     * 
     * @param content
     *            文本
     * @param outPath
     *            输出目录
     * @param outName
     *            输出文件名
     * @param format
     *            文件格式
     * @param width
     *            生成图片宽度
     * @param height
     *            生成图片高度
     */
    public static void barCodeBuild(String content, String outPath, String outName, String format, int width,
            int height) {

        // 文件检测
        if (!new File(outPath).exists()) {
            new File(outPath).mkdirs();
        }
        Path path = FileSystems.getDefault().getPath(outPath, outName);

        try {
            Code128Writer writer = new Code128Writer();
            BitMatrix matrix = writer.encode(content, BarcodeFormat.CODE_128, width, height);
            MatrixToImageWriter.writeToPath(matrix, format, path);
            System.out.println("调试输出:OK");
        } catch (WriterException | IOException e) {
            e.printStackTrace();
        }
    }
}

可以参考这里这里

以上是关于JavaWeb 二维码的主要内容,如果未能解决你的问题,请参考以下文章

《java精品毕设》基于javaweb宠物领养平台管理系统(源码+毕设论文+sql):主要实现:个人中心,信息修改,填写领养信息,交流论坛,新闻,寄养信息,公告,宠物领养信息,我的寄养信息等(代码片段

pbootcms对接微信扫码登录代码核心片段和步骤(前后端)

JavaWeb 二维码

javaweb入门-----jsp概念

leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和](代码片段

Java生成二维码(Java程序都可以使用)