自定义生成二维码,解析指定内容编码格式的二维码。

  1. 引入依赖
     <!--二维码解析-->
     <dependency>
         <groupId>com.google.zxing</groupId>
         <artifactId>core</artifactId>
         <version>3.3.3</version>
     </dependency>
     <dependency>
         <groupId>com.google.zxing</groupId>
         <artifactId>javase</artifactId>
         <version>3.3.3</version>
     </dependency>
  1. 编写工具类
    其中包含了 生成二维码解析上传二维码内容(直解析utf-8和GBK编码的二维码)解析本地二维码内容,自定义编码格式
package com.meng.weixin.util;

import cn.hutool.extra.qrcode.BufferedImageLuminanceSource;
import com.google.zxing.*;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashMap;

/**
 * 二维码的解析,生成
 * @author lenovo
 */
public class QRCodeUtil {

    /**
     * 生成二维码
     * @param contents 内容
     * @param format 二维码图片后缀
     * @param filepath //生成二维码路径(当包含二维码名称和后缀,忽略format)
     * @throws IOException
     * @throws NotFoundException
     */
    public static void getQRCode(String contents,String format,String filepath) throws IOException, NotFoundException {
        getQRCode(contents, format, filepath,"utf-8");
    }
    /**
     * 生成二维码
     * @param contents 内容
     * @param format 二维码图片后缀
     * @param filepath //生成二维码路径(当包含二维码名称和后缀,忽略format)
     * @param character 二维码内容编码方式
     * @throws IOException
     * @throws NotFoundException
     */
    public static void getQRCode(String contents,String format,String filepath,String character) throws IOException, NotFoundException {
       getQRCode(300,300,contents,format,filepath,character);
    }
    /**
     * 生成二维码
     * @param width 宽
     * @param height 高
     * @param contents 内容
     * @param format 二维码图片后缀
     * @param filepath //生成二维码路径(当包含二维码名称和后缀,忽略format)
     * @param character 二维码内容编码方式
     * @throws IOException
     * @throws NotFoundException
     */
    public static void getQRCode(int width,int height,String contents,String format,String filepath,String character) throws IOException, NotFoundException {
        HashMap map = new HashMap();
        map.put(EncodeHintType.CHARACTER_SET,character);
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        map.put(EncodeHintType.MARGIN, 0);
        try {
            BitMatrix bm = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height,map);
            Path file = new File(filepath).toPath();
            MatrixToImageWriter.writeToPath(bm, format, file);
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 解析上传二维码内容(直解析utf-8和GBK编码的二维码)
     * @param QRImg 二维码图片
     * @throws IOException
     * @throws NotFoundException
     */
    public static String analysis(File QRImg) throws IOException, NotFoundException {
        BufferedImage image = ImageIO.read(QRImg);
        BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
        HashMap map = new HashMap();
        map.put(DecodeHintType.CHARACTER_SET, "utf-8");
        Result result = new MultiFormatReader().decode(bb, map);
        String QRContents=result.getText();
        if (result.getText().contains("�")){
            //乱码了,更换编码方式
            System.out.println("乱码了,更换编码格式(GBK)");
            map.put(DecodeHintType.CHARACTER_SET, "GBK");
            result = new MultiFormatReader().decode(bb, map);
            QRContents=result.getText();
        }
        System.out.println("二维码文本内容:"+QRContents);
        return QRContents;
    }
    /**
     * 解析本地二维码内容(直解析utf-8和GBK编码的二维码)
     * @param filePath 二维码图片地址
     * @throws IOException
     * @throws NotFoundException
     */
    public static String analysis(String filePath) throws IOException, NotFoundException {
        BufferedImage image = ImageIO.read(new File(filePath));
        BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
        HashMap map = new HashMap();
        map.put(DecodeHintType.CHARACTER_SET, "utf-8");
        Result result = new MultiFormatReader().decode(bb, map);
        String QRContents=result.getText();
        if (result.getText().contains("�")){
            //乱码了,更换编码方式
            System.out.println("乱码了,更换编码格式(GBK)");
            map.put(DecodeHintType.CHARACTER_SET, "GBK");
            result = new MultiFormatReader().decode(bb, map);
            QRContents=result.getText();
        }
        System.out.println("二维码文本内容:"+QRContents);
        return QRContents;
    }
    /**
     * 解析本地二维码内容,自定义编码格式
     * @param filePath 二维码图片地址
     * @param character 二维码内容编码格式
     * @throws IOException
     * @throws NotFoundException
     */
    public static String analysis(String filePath,String character) throws IOException, NotFoundException {
        BufferedImage image = ImageIO.read(new File(filePath));
        BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
        HashMap map = new HashMap();
        map.put(DecodeHintType.CHARACTER_SET,character);
        Result result = new MultiFormatReader().decode(bb, map);
        String QRContents=result.getText();
        return QRContents;
    }


}

  1. 测试
    写一个接口测试
/**
     * 解析上传的二维码
     * @param QRImg(勿用中文名称的二维码)
     * @return
     * @throws IOException
     * @throws NotFoundException
     */
    @PostMapping("/QRanalysis")
    public Result QRanalysis(@RequestParam("QRImg") MultipartFile QRImg) throws IOException, NotFoundException {
//        String decode = QrCodeUtil.decode();
        String analysis = QRCodeUtil.analysis(MultipartFileToFile(QRImg));
        return Result.ok(analysis);
    }
    
	/**
     * 将MultipartFile转换为File
     * @param multiFile
     * @return
     */
    public static File MultipartFileToFile(MultipartFile multiFile) {
        // 获取文件名
        String fileName = multiFile.getOriginalFilename();
        // 获取文件后缀
        String prefix = fileName.substring(fileName.lastIndexOf("."));
        // 若须要防止生成的临时文件重复,能够在文件名后添加随机码

        try {
            File file = File.createTempFile(fileName, prefix);
            multiFile.transferTo(file);
            return file;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
  1. 结果
    在这里插入图片描述
    生成的二维码在这里:
    在这里插入图片描述
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ZXing一维码/二维码 使用文档 样例: System.IO.Stream stmYiWei = new System.IO.MemoryStream(); BitMatrix byteMatrix = new MultiFormatWriter().encode(sCode, BarcodeFormat.CODE_39, 230, 40); toBitmap(byteMatrix).Save(stmYiWei, ImageFormat.Bmp); Byte[] byteYiWei = new byte[stmYiWei.Length]; stmYiWei.Position = 0; stmYiWei.Read(byteYiWei, 0, (int)stmYiWei.Length); //将图片文件流保存为二进制文件以便保存到数据库中 System.IO.Stream stmErWei = new System.IO.MemoryStream(); IDictionary hints = new Dictionary(); hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); byteMatrix = new MultiFormatWriter().encode(sTmp, BarcodeFormat.QR_CODE, 200, 200, hints); toBitmap(byteMatrix).Save(stmErWei, ImageFormat.Bmp); Byte[] byteErWei = new byte[stmErWei.Length]; stmErWei.Position = 0; stmErWei.Read(byteErWei, 0, (int)stmErWei.Length); //将图片文件流保存为二进制文件以便保存到数据库中 strSQL = "insert into gdzc_biaoqian( bq_gd_no,bq_yiweima,bq_erweima,bq_us_no) values("; strSQL = strSQL + " @bq_gd_no,@bq_yiweima,@bq_erweima,@bq_us_no)"; SqlCommand commandImage = new SqlCommand(strSQL, connectionImage); commandImage.Parameters.Clear(); commandImage.Parameters.Add("@bq_gd_no", SqlDbType.Int).Value = Convert.ToInt32(sGdzcNo); commandImage.Parameters.Add("@bq_yiweima", SqlDbType.Image).Value = byteYiWei; commandImage.Parameters.Add("@bq_erweima", SqlDbType.Image).Value = byteErWei; commandImage.Parameters.Add("@bq_us_no", SqlDbType.Int).Value = Convert.ToInt32(Session["LoginUserID"]); commandImage.ExecuteNonQuery(); commandImage.Dispose();
### 回答1: LabVIEW是一种基于图形化编程的软件开发平台,可以轻松地完成各种控制、测试、测量和监测的应用程序开发。二维码是一种用于存储各种信息的方便的编码方式,可以被扫描器或智能手机瞬间识别。在LabVIEW中生成二维码可以使用第三方工具包进行实现,例如QrCodeLibrary toolkit。 使用该工具包,可以快速创建二维码并嵌入到LabVIEW应用程序中。首先需要创建一个容器,然后将二维码图像插入到容器中。在插入图像时,需要指定二维码的数据内容、尺寸、颜色和位置等属性。此外,还可以对生成的二维码进行一些自定义操作,如添加logo、修改背景等。 在生成二维码的过程中需要注意一些细节,如二维码中存储的数据量不能过大,二维码的容错率需要根据具体需求做出选择等。最终生成的二维码可以被保存到文件中,也可以通过网络或其他途径传输。在实际应用中,二维码经常被用于产品标识、物流追踪、门禁卡、活动参与等场景中。 ### 回答2: LabVIEW是一款可视化编程语言,可以通过它来生成二维码生成二维码需要使用二维码生成工具包。该工具包可以从NI官网下载并在LabVIEW环境下安装。在使用二维码生成工具包前,需要先在LabVIEW中创建一个VI,然后将工具包中的生成二维码函数添加到该VI中。 生成二维码的过程,其实就是将输入的字符串转换成二维码格式,并输出为一个图片文件。在LabVIEW中,可以通过设置任意的输入字符串,来生成所需的二维码。生成的二维码可以在VI中实时显示,并且可以保存为图片文件以备后续使用。 除了生成二维码,LabVIEW还可以通过调用扫描二维码的功能来实现读取和解析二维码的操作。使用LabVIEW开发读取二维码的应用程序,可以应用于多种场合,如物流管理、材料追溯和产品溯源等。 总之,LabVIEW的二维码生成功能可以方便快捷地生成二维码,并且具有较高的可扩展性,可以应用于各种各样的领域。 ### 回答3: LabVIEW是一种用于工程领域的流程图编程语言和集成开发环境。在实际应用中,有时需要生成二维码以方便信息的传输。LabVIEW提供了丰富的工具和函数库,可以帮助用户轻松生成二维码。 在LabVIEW中生成二维码需要用到QR Code Toolkit工具包。QR Code Toolkit提供了生成、解码、打印和显示二维码的功能。使用QR Code Toolkit生成二维码的步骤如下: 1. 打开LabVIEW并创建一个新的VI。 2. 下载并安装QR Code Toolkit。 3. 打开Vi,通过选择“QR Code”选项来创建一个QR Code。 4. 在弹出的对话框中,输入所需的文本信息并设置二维码的大小。 5. 单击“生成”按钮以生成二维码。 6. 可以利用LabVIEW中的“Image Control”等控件显示生成的二维码。 需要注意的是,生成的二维码应与规范相符。同时,为了保证Code的健壮性和可读性,建议在生成过程中使用高质量的打印材料以及保证环境的清洁度。 综上所述,利用LabVIEW生成二维码不仅方便快捷,而且有效提高了信息传输的效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XuDream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值