日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java調用pyzbar解析base64二維碼過程解析

瀏覽:113日期:2022-08-26 16:20:21

一、環境配置

所有OS,建議使用python3.6;python2.7也可以,但在安裝過程中可能遇到升級pip等問題;請參考pyzbar官網https://pypi.org/project/pyzbar/

1.Ubuntu16.4

apt-get install libzbar0pip install pyzbarpip install Pillow

2.Centos7

yum install python-develyum install zbar-develyum install zbar

pip install Pillowpip install pyzbar

3.Windows

pip install Pillowpip install pyzbar

還需安裝Visual C++ Redistributable Packages for Visual Studio 2013,即從微軟官方下載的 vcredist_x64.exe程序

二、代碼編寫

Java代碼

UserController.java

package com.yang.springbootlucene.controller;import lombok.Data;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.core.io.ClassPathResource;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.io.File;import java.io.FileWriter;import java.io.IOException;/** * @author:yjx * @description: * @date:2019/11/28 15:29 */@Slf4j@RestController@RequestMapping('/user')public class UserController { @Value('${pyzbar.script}') private String scriptPath; private static final String BASE_64_PREFIX = 'data:image/png;base64,'; /** * 這種方式在源碼中成功調用,但達成jar包后,找不到腳本路徑,所以腳本必須放在外面 */ @Deprecated private static String pyZbarScriptPath; /* static { ClassPathResource pathResource = new ClassPathResource('/script/my_py_zbar.py'); try { pyZbarScriptPath = pathResource.getFile().getAbsolutePath(); } catch (IOException e) { e.printStackTrace(); } } */ @RequestMapping('/cameraScanPyZbar') public Object cameraScanPyZbar(@RequestBody String base64) throws IOException { if (this.checkBase64Head(base64)) { //1.去掉base64字符的頭部 String base64Str = this.cutHead(base64); //2.創建臨時文件(由于圖片的base64字符太長,不支持直接以命令參數的形式傳遞,故將字符串寫入臨時文件,而后python程序讀取臨時文件內容) String tempPath = './' + Thread.currentThread().getName(); File tempFile = new File(tempPath); FileWriter fileWriter = new FileWriter(tempFile, false); fileWriter.write(base64Str); fileWriter.flush(); fileWriter.close(); //3.調用pyzbar解析base64字符串 String plainText = PyZbarUtil.executePyzbar('python', scriptPath, tempFile.getAbsolutePath()); //4.刪除臨時文件 tempFile.delete(); System.err.println('--------->' + plainText); return plainText; } else { return '參數格式錯誤'; } } /** * 校驗Base64值是否已規定的串開始 * * @param base64 * @return */ private boolean checkBase64Head(String base64) { return base64.startsWith(BASE_64_PREFIX); } /** * Base64去頭 * * @param base64 * @return */ private String cutHead(String base64) { return base64.replaceAll(BASE_64_PREFIX, ''); }}

PyZbarUtil.java

package com.yang.springbootlucene.controller;import java.io.BufferedReader;import java.io.InputStreamReader;public final class PyZbarUtil { /** * 腳本執行工具類 * * @param lang 命令語言 * @param scriptPath 腳本絕對路勁 * @param base64Path base64文件絕對路徑 * @return */ public static String executePyzbar(String lang, String scriptPath, String base64Path) { String[] arguments = new String[]{lang, scriptPath, base64Path}; try { Process process = Runtime.getRuntime().exec(arguments); int re = process.waitFor(); 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; }}

python腳本my_py_zbar.py

# -*-coding:UTF-8-*-import sysimport base64from io import BytesIOimport pyzbar.pyzbar as pyzbarfrom 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]))) print(parse_byte_stream_qr_code(convert_base64_to_byte_stream(open(argv[1]).readline())))if __name__ == '__main__': main(sys.argv)

三、主要坑點

圖片轉base64后,得到的字符串太長,不能直接以命令參數的形式傳遞,所以必須將其寫入臨時文件,然后python腳本讀取臨時文件進行解析 若將python腳本放在項目中,項目打成jar包后,無法定位腳本路徑,導致執行失敗,所以必須將腳本放在jar包外,以配置的形式將路徑傳遞給java項目

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区二区三区网站| 国产精品久久观看| 国产精品社区| 亚洲一卡久久| av成人国产| 免费欧美在线视频| 日日夜夜免费精品| 欧美精品中文| 精品久久电影| 精品久久久久中文字幕小说| 国产精品成人一区二区不卡| 国产精品成人a在线观看| 伊伊综合在线| 欧美日韩在线网站| 麻豆极品一区二区三区| 欧美黑人巨大videos精品| 国产一区二区三区黄网站| 欧美黄色网页| 亚洲综合日韩| 国产欧美自拍| 日本美女一区| 久久亚洲影院| 欧美激情网址| 久久一区二区中文字幕| 99国产精品| 日韩国产一二三区| 国产日韩中文在线中文字幕| 国产一区二区三区久久| 99久久亚洲精品| 亚洲性视频在线| 免费看一区二区三区| 久久要要av| 日本不卡在线视频| 国产精品二区不卡| 91久久久久| 国产精品一区二区av日韩在线| 国产一区二区三区四区大秀| 婷婷精品进入| 天海翼精品一区二区三区| 国产欧美一区| 亚洲二区在线| 日韩精品视频网站| 黄色aa久久| 亚久久调教视频| 新版的欧美在线视频| 在线观看一区| 热三久草你在线| 日韩激情一区二区| 久久电影tv| 亚洲精品乱码| 成人午夜亚洲| 男人的天堂久久精品| 久久一级电影| 国产欧美日韩精品一区二区三区 | 中文字幕亚洲在线观看| 成人午夜亚洲| 视频一区日韩精品| 欧美日韩精品在线一区| 国产精品毛片aⅴ一区二区三区| 国内精品福利| 精品国产不卡一区二区| 男人的天堂久久精品| av在线最新| 日韩三级视频| 91精品国产乱码久久久久久久| 日韩和欧美一区二区| 国产99精品| 日本精品在线播放| 久久精品播放| 精品一区二区男人吃奶| 亚洲精品系列| 欧美福利一区| 欧美极品中文字幕| 日本亚洲欧美天堂免费| 欧美色图国产精品| 国产一区精品福利| 国产探花一区| 最新国产精品久久久| 欧美日韩一区二区三区视频播放| 国产精品22p| 亚洲精品乱码久久久久久蜜桃麻豆| 中文在线а√在线8| 69堂免费精品视频在线播放| 亚洲在线成人| jiujiure精品视频播放| 中文字幕高清在线播放| 国产探花在线精品| 中文字幕免费一区二区| 精品一区免费| 韩国久久久久久| 另类欧美日韩国产在线| 欧美日韩亚洲一区二区三区在线| 99在线观看免费视频精品观看| 日本精品不卡| 日韩久久视频| 成人综合一区| 久久精品亚洲一区二区| 亚洲啊v在线免费视频| 麻豆久久精品| 国产农村妇女精品一区二区| 欧美va天堂在线| 久久久影院免费| 日韩免费小视频| 国产精品毛片一区二区在线看| 久久a爱视频| 国产免费av国片精品草莓男男| 亚洲一区二区三区中文字幕在线观看| 欧美影院三区| 99久久99视频只有精品| 丝袜美腿一区| 日韩高清中文字幕一区二区| 亚洲伊人av| 精品国产a一区二区三区v免费| 免费在线成人| 国产中文欧美日韩在线| 国产一区三区在线播放| 韩日一区二区| 欧美激情另类| 吉吉日韩欧美| 亚洲91视频| 午夜视频精品| 免费人成精品欧美精品 | 亚洲乱码视频| 亚洲日本三级| 日韩av资源网| 日本99精品| 国产欧美成人| 久久婷婷国产| 婷婷综合六月| 欧洲激情综合| 免费成人在线影院| 亚洲ww精品| 国产精品一区二区三区美女| 免费在线成人| 欧洲精品一区二区三区| 亚洲第一精品影视| 亚洲一区激情| 91精品在线免费视频| 国产精品嫩模av在线| 国内自拍视频一区二区三区| 国产91在线精品| 国产一区亚洲| 亚洲综合图色| 国产精品va| 日韩高清中文字幕一区二区| 午夜欧美精品| 日韩精品第一| 成人国产综合| 婷婷亚洲综合| 日本不卡高清| 亚洲精品99| 日本在线不卡视频| 丰满少妇一区| 中文日韩欧美| 国产欧美日韩影院| 91亚洲国产成人久久精品| 91久久久精品国产| 97se亚洲| 中文字幕成在线观看| 国产亚洲福利| 国产精品草草| 欧美日韩色图| 日本久久二区| 黄色aa久久| 日韩制服丝袜先锋影音| 国产伦乱精品| 中文字幕系列一区| 免费在线观看精品| 国产精品jk白丝蜜臀av小说| 久久久久国产一区二区| 99亚洲视频| 久久久精品国产**网站| 欧美日韩在线播放视频| 午夜天堂精品久久久久| 国产精品国产一区| 蜜桃视频免费观看一区| 精品久久在线| 丝袜美腿亚洲一区| 精品三级在线观看视频| 欧美日韩国产综合网| 国产日韩一区二区三区在线| 日本美女一区| 伊人精品久久| 日韩精品欧美| 国产亚洲欧美日韩在线观看一区二区| 日本欧美国产| 亚洲精品乱码| 99久久亚洲精品蜜臀| 国产精品一区二区三区www| 不卡在线一区| 国产精品一级在线观看| 性欧美69xoxoxoxo| 精品国产麻豆| 亚洲精品极品| 香蕉久久精品| 久久在线91| 日韩**一区毛片| 91成人超碰| 日韩av在线播放网址| 日本麻豆一区二区三区视频|