`

JAVA 生成条码(一维码)及二维码

    博客分类:
  • Java
阅读更多
package zjpt.zwsm.utils;

import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;

public class QrBarCode {
    private static final String CODE = "utf-8";
    private static final int BLACK = 0xff000000;
    private static final int WHITE = 0xFFFFFFFF;

    /**
     * 生成RQ二维码
     *
     * @param str    内容
     * @param height 高度(px)
     * @author wuhongbo
     */
    public static BufferedImage getRQ(String str, Integer height) {
        if (height == null || height < 100) {
            height = 200;
        }

        try {
            // 文字编码
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
            hints.put(EncodeHintType.CHARACTER_SET, CODE);

            BitMatrix bitMatrix = new MultiFormatWriter().encode(str,
                    BarcodeFormat.QR_CODE, height, height, hints);

            return toBufferedImage(bitMatrix);

            // 输出方式
            // 网页
            // ImageIO.write(image, "png", response.getOutputStream());

            // 文件
            // ImageIO.write(image, "png", file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 生成一维码(128)
     *
     * @param str
     * @param width
     * @param height
     * @return
     * @author wuhongbo
     */
    public static BufferedImage getBarcode(String str, Integer width,
                                           Integer height) {

        if (width == null || width < 200) {
            width = 200;
        }

        if (height == null || height < 50) {
            height = 50;
        }

        try {
            // 文字编码
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
            hints.put(EncodeHintType.CHARACTER_SET, CODE);

            BitMatrix bitMatrix = new MultiFormatWriter().encode(str,
                    BarcodeFormat.CODE_128, width, height, hints);

            return toBufferedImage(bitMatrix);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 生成二维码,写到文件中
     *
     * @param str
     * @param height
     * @param file
     * @throws IOException
     * @author wuhongbo
     */
    public static void getQRWriteFile(String str, Integer height, File file)
            throws IOException {
        BufferedImage image = getRQ(str, height);
        ImageIO.write(image, "png", file);
    }

    /**
     * 生成一维码,写到文件中
     *
     * @param str
     * @param height
     * @param file
     * @throws IOException
     * @author wuhongbo
     */
    public static void getBarcodeWriteFile(String str, Integer width,
                                           Integer height, File file) throws IOException {
        BufferedImage image = getBarcode(str, width, height);
        ImageIO.write(image, "png", file);
    }

    /**
     * 转换成图片
     *
     * @param matrix
     * @return
     * @author wuhongbo
     */
    private static BufferedImage toBufferedImage(BitMatrix matrix) {
        int width = matrix.getWidth();
        int height = matrix.getHeight();
        BufferedImage image = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_ARGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
            }
        }
        return image;
    }

    /**
     * 解码(二维、一维均可)
     */
    public static String read(File file) {

        BufferedImage image;
        try {
            if (file == null || file.exists() == false) {
                throw new Exception(" File not found:" + file.getPath());
            }

            image = ImageIO.read(file);

            LuminanceSource source = new BufferedImageLuminanceSource(image);
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

            Result result;

            // 解码设置编码方式为:utf-8,
            Hashtable hints = new Hashtable();
            hints.put(DecodeHintType.CHARACTER_SET, "utf-8");

            result = new MultiFormatReader().decode(bitmap, hints);

            return result.getText();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    public static void main(String[] args) throws Exception {
        File file = new File("D://test.png");
        // 生成二维码
        //QRUtil.getQRWriteFile("http://www.baid.com", 200, file);

        // 生成一维码
        QrBarCode.getBarcodeWriteFile("6940577300018", null, null, file);

        System.out.println("-----成生成功----");
        System.out.println();

        // 解析生成的图片
        String jxr = QrBarCode.read(file);

        System.out.println("-----解析成功----");
        System.out.println(jxr);
    }
}

 

分享到:
评论

相关推荐

    生成一维码二维码并调用打印机打印

    1. **生成条码/二维码图像**:使用相应的库生成一维码或二维码的图像文件,常见的格式有PNG、SVG等。 2. **设置打印机接口**:了解打印机的接口,这可能是通过网络(如Wi-Fi、蓝牙)、USB或者通过共享网络打印机的...

    java实现条形码二维码生成含文字标签信息

    它支持多种条码格式,包括一维条形码(如EAN-13、UPC-A)和二维条形码(如QR Code、Data Matrix)。在Java环境下,我们可以利用ZXing的`com.google.zxing`包中的类和方法来创建条形码和二维码。 首先,要生成条形码...

    java生成和解析一维码二维码

    Java生成和解析一维码二维码是一项常见的编程任务,特别是在物联网(IoT)和移动应用中。一维码,如条形码,常用于商品的库存管理和零售业;而二维码则包含更多数据,常用于电子票务、信息分享和追踪物流等场景。在...

    ireport生成一维码和google zxing二维码

    ZXing,意为“条形码扫描”,是一个强大的工具,支持多种一维码和二维码的生成和解码。其核心功能包括编码(生成二维码或条形码图像)和解码(识别图像中的条形码)。ZXing提供了多种语言的API,包括Java,便于...

    java生成一维码和二维码程序以及jar包

    总的来说,Java生成一维码和二维码的能力强大且灵活,通过引入合适的库并理解其API,开发者可以轻松地在项目中实现这一功能。无论是在网页、桌面应用还是移动应用中,都能找到合适的方法来满足需求。记住,测试和...

    google zxing读取、生成一维码、二维码图片

    ZXing(Zebra Crossing)是Google开发的一个开源项目,专门用于处理一维条形码和二维二维码的生成与读取。这个项目的名字来源于其英文名的首字母缩写,象征着“斑马线”,寓意在数据世界中指引信息的交汇。ZXing提供...

    java生成一维码

    总之,Java生成一维码主要依赖于第三方库,如ZXing。通过这些库,可以方便地将数据编码为一维码图像,然后在各种应用场景中使用,如网页、打印标签等。在实际开发中,还需要考虑到错误处理、一维码格式的选择以及与...

    用java一维码批量生成(条码)图片

    在IT行业中,生成一维码或条形码的图片是一项常见的任务,特别是在物流、库存管理、产品标识等领域。本文将详细讲解如何使用Java语言来批量生成一维码图片,以及可能遇到的问题和解决方案。 首先,Java中实现一维码...

    条形码、二维码扫描、生成Demo 完整源码

    ZXing,意为“斑马线交叉”,是一个强大的开源库,支持多种条码格式,包括一维条形码(如Code 39、Code 128、UPC/EAN等)和二维条形码(如QR Code、Aztec、Data Matrix等)。ZXing提供Java、Android和C#等多种语言的...

    生成一维码和二维码

    1. 一维码:一维码(如条形码)是最早使用的编码方式,通常包含线性数据,如EAN-13、UPC-A等。它只能存储有限的数字和字母信息,一般用于商品的快速扫描识别。 2. 二维码:二维码(Quick Response Code)是一种二维...

    一维码二维码生成Zxing

    - **一维码**:如常见的条形码,仅能沿一个维度(水平)存储信息,容量有限,一般用于表示简单的商品编码。 - **二维码**:在二维空间内存储信息,包含更多数据,如URL、文本、联系人信息等,且纠错能力更强。 2....

    Java生成物流打印单(条形码,二维码)

    Zxing,全称“ZXing (Zebra Crossing)”,是一个开源的条码解码库,支持多种条形码和二维码格式,如QR Code、Code 128、UPC-A等。在生成物流打印单时,我们可以使用Zxing的编码功能将物流单号或其他数据转化为对应的...

    一维码二维码生成识别工具barcode4j

    barcode4j是一个开源的Java库,专为生成一维码和二维码而设计。它支持多种一维码格式(如EAN、UPC、Code 128、Code 39等)和二维码格式(如QR Code、Aztec、PDF417等)。这个工具的亮点在于其简单易用,开发者只需将...

    PDF417码和其他一维码和二维码生成(java实现)

    在Java编程环境中,生成PDF417码和其他一维码、二维码的技术通常依赖于特定的库或API。这些库能够帮助开发者轻松地将文本信息转换为条码图像,以便打印或显示。以下是一些常见的Java条码生成库: 1. **ZXing (Zebra...

    java解析生成一维码二维码源码加相关的jar包

    ZXing是一个开源的、多平台的条形码和二维码读取、生成项目,它提供了多种编程语言的支持,包括Java。 首先,`core-3.3.3.jar`和`zxing-javase.jar`是ZXing库的核心组件。`core.jar`包含了ZXing的底层解码功能,而`...

    android二维码条形码(一维码)生成、扫描和解析

    本篇文章将详细讲解如何在Android应用中实现二维码和一维码(条形码)的生成、扫描以及解析。 首先,我们要理解二维码和一维码的基本概念。二维码是一种二维条形码,可以存储更多的信息,如网址、文本、联系人信息...

    java实现生成二维码(包括必要jar)

    二维码(Quick Response Code)是一种二维条形码,能够存储大量的文本、数字、网址等信息,通过手机或其他设备扫描即可快速读取。相比传统的条形码,二维码具有信息容量大、纠错能力强、编码范围广等特点。 在Java...

    android生成一维码与二维码

    在Android平台上,生成一维码(条形码)和二维码是一项常见的需求,这通常涉及到集成第三方库或使用系统提供的API。本篇文章将详细介绍如何在Android应用中实现这一功能,主要聚焦于生成环节,不涉及扫描。 一、...

    基于java开发的二维码生成小程序

    【基于Java开发的二维码生成小程序】是一个利用Java编程语言实现的实用工具,它能够帮助用户快速生成可扫描的二维码,这些二维码在扫描后能够跳转到预设的网站。这个小程序集成了二维码编码技术,使得非技术人员也能...

    spring boot整合二维码和条形码

    接下来,我们创建一个服务类,例如`CodeGeneratorService`,来实现二维码和条形码的生成方法。以下是一个简单的示例: ```java import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; ...

Global site tag (gtag.js) - Google Analytics