zoukankan      html  css  js  c++  java
  • 通过Java程序执行Python脚本调用pyzbar解析base64形式的二维码(终极方案)

    1. Python脚本
    # -*-coding:UTF-8-*-
    
    import sys
    import base64
    from io import BytesIO
    import pyzbar.pyzbar as pyzbar
    from PIL import Image,ImageEnhance
    
    
    '''将base64转换为字节流'''
    def convert_base64_to_byte_stream(base64_str):
        # 1.解码Base64字符串
        img_data = base64.b64decode(base64_str)
    
        # 2.将节码结果转为字节流
        byte_stream = BytesIO(img_data)
        return byte_stream
    
    
    '''从将字节流解析二维码'''
    def parse_byte_stream_qr_code(byte_stream):
        # 3.打开字节流得到图片对象
        img = Image.open(byte_stream)
    
        img = ImageEnhance.Brightness(img).enhance(2.0)  #增加亮度
        img = ImageEnhance.Contrast(img).enhance(4.0)  #增加对比度
        # img = ImageEnhance.Sharpness(img).enhance(17.0)  #锐利化
        # img = img.convert('L')  #灰度化
    
        # img.show()  # 播放图片,供测试用
    
        # 4.调用pyzbar解析图片中的二维码
        barcodes = pyzbar.decode(img)
    
        # 5.打印解析结果
        return barcodes[0].data.decode("utf-8")
    
    
    def main(argv):
        print(parse_byte_stream_qr_code(convert_base64_to_byte_stream(argv[1])))
    
    
    if __name__ == "__main__":
        main(sys.argv)
    
    1. Java源码
    package com.yang.springbootlucene.controller;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class PyZbarTest {
    
        private static String PY_SCRIPT_PATH = "F:\pycharmws\com\py_zbar_test\build_for_commend.py";
        private static String BASE_64_STR = "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";
    
        public static void main(String[] args) {
            //这里传递的其实是OS级别的命令
            System.out.println(ExecutePyzbar("python", PY_SCRIPT_PATH, BASE_64_STR));
        }
    
        private static String ExecutePyzbar(String lang, String scriptPath, String base64) {
            String[] arguments = new String[]{lang, scriptPath, base64};
            try {
                Process process = Runtime.getRuntime().exec(arguments);
                int re = process.waitFor();
    
                //java代码中的process.waitFor()返回值为0表示调用python脚本成功,1表示调用失败,这个有点【反直觉】
                if (re == 0) {
                    try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));) {
                        return in.readLine();
                    }
                } else {
                    System.err.println("脚本调用失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    1. 执行Java程序最终打印二维码中的"hello world"字符串;

    实践中,可以将Java代码中的Python脚本路径配置化、base64图片参数化。

  • 相关阅读:
    Java集合框架——Map接口
    深入分析——HashSet是否真的无序?(JDK8)
    你这辈子最引以为傲的是什么?
    全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!
    Spring Cloud Alibaba与Spring Boot、Spring Cloud之间不得不说的版本关系
    Spring Cloud Alibaba基础教程:Nacos的集群部署
    Spring Cloud Alibaba基础教程:Nacos的数据持久化
    Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
    Spring Cloud Alibaba基础教程:Nacos配置的多环境管理
    Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/13457899.html
Copyright © 2011-2022 走看看