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();
        }
    }
}

可以参考这里这里

原文地址:https://www.cnblogs.com/vmask/p/8728672.html

时间: 2024-08-29 10:13:41

JavaWeb 二维码的相关文章

javaweb二维码

QRCode.java程序 package my; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.imageio.ImageIO; import javax.servlet.http.HttpSer

java web工程引用java project(以二维码和加密为例)

在多人开发同一个javaweb工程时,可以把java工程从外部调用,不必都写到一个javaweb工程, 通过将二维码和加密的java程序都写成单独的java工程,最后用一个javaweb工程调用,效果图如下 子工程目录结构 javaweb工程目录(注意子工程的jar包也要拿过来) eclipse配置步骤: 主工程右键=>java build path =>projects=>add=>选择两个子工程 java build path=>libraries=>add cla

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

工具类,链接:https://pan.baidu.com/s/18U399fTH5wBJPnL97pAekg 提取码:bmw7 注:里面的corejar包是使用的zxing的代码,我只是将其导出的jar文件 二维码大部分是在JavaWeb中使用的,我就在JavaWeb演示了 导入jar,导入后会自动构建jar包 初始化方法参数解释: 第一个参数:生成二维码的宽度 第二个参数:生成二维码的高度 第三个参数:生成二维码Logo的宽度 第四个参数:生成二维码Logo的高度 第五个参数:生成二维码Log

二维码扫码积分系统定制开发

微信积分系统 二维码扫码积分系统定制开发找丽姐[158.1816.6626/电微]二维码营销模式系统定制开发 微信扫二维码营销系统开发 扫码领积分系统开发 一.如何实现扫二维码领红包功能? 1.使用扫描二维码领取红包对活动进行设置,包括红包数量.红包金额.促销地区.中奖概率等. 2.将生成的二维码赋到商品上面并赋涂层,一方面可以起到保证二维码的一次性,另一方面也可以引起消费者的好奇心. 3.通过手机微信打开扫一扫,扫码商品二维码关注公众号并领取红包,如果参与分享还可以获得抽奖的机会. 二.微信扫

微信生成二维码 只需一个网址即刻 还有jquery生成二维码

<div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text=http://123.net/index.php?s=/Home/Index/yanzheng/mai/{$dange.id}" style="width: 5rem; margin-bottom: 1rem;" > </div> http://qr.tops

家电二维码售后服务平台系统开发

家电二维码售后服务平台系统开发,家电二维码售后系统开发,小吴183.2071.6434微电,家电二维码售后软件开发,家电二维码售后平台开发. 互联网平台的节点有两大类型:第一基数节点,也就是弱连接的节点,其规模要大,越大越好,互联网的价值与节点数的平比成正比.第二活跃节点,也就是强连接的节点,其能量要强,越强越好,互联网的价值与其强度成正比. 一.家电维修行业"维修黑幕"层出不穷 记者从一位从事家电维修人士那里了解到,目前行业公认当前家电维修行业有陷阱,"维修黑幕"

微信小程序(4)--二维码窗口

微信小程序二维码窗口: <view class="btn" bindtap="powerDrawer" data-statu="open">button</view> <!--mask--> <view class="drawer_screen" bindtap="powerDrawer" data-statu="close" wx:if=&qu

微信服务器与项目服务器的交互(关注功能、微信扫描带参数二维码)

<?php /** * wechat php test */ //define your token define("TOKEN", "txtj"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallback

Java生成微信二维码及logo二维码

依赖jar包 QrCode.jar:https://pan.baidu.com/s/1c1PYV0s 加入本地 maven: mvn install:install-file -Dfile=QRCode.jar -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar 实例源码 import com.swetake.util.Qrcode; import javax.imageio.ImageIO; import jav