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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java調(diào)用pyzbar解析base64二維碼過(guò)程解析

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

一、環(huán)境配置

所有OS,建議使用python3.6;python2.7也可以,但在安裝過(guò)程中可能遇到升級(jí)pip等問(wèn)題;請(qǐng)參考pyzbar官網(wǎng)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程序

二、代碼編寫(xiě)

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,'; /** * 這種方式在源碼中成功調(diào)用,但達(dá)成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.創(chuàng)建臨時(shí)文件(由于圖片的base64字符太長(zhǎng),不支持直接以命令參數(shù)的形式傳遞,故將字符串寫(xiě)入臨時(shí)文件,而后python程序讀取臨時(shí)文件內(nèi)容) String tempPath = './' + Thread.currentThread().getName(); File tempFile = new File(tempPath); FileWriter fileWriter = new FileWriter(tempFile, false); fileWriter.write(base64Str); fileWriter.flush(); fileWriter.close(); //3.調(diào)用pyzbar解析base64字符串 String plainText = PyZbarUtil.executePyzbar('python', scriptPath, tempFile.getAbsolutePath()); //4.刪除臨時(shí)文件 tempFile.delete(); System.err.println('--------->' + plainText); return plainText; } else { return '參數(shù)格式錯(cuò)誤'; } } /** * 校驗(yàn)Base64值是否已規(guī)定的串開(kāi)始 * * @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 { /** * 腳本執(zhí)行工具類(lèi) * * @param lang 命令語(yǔ)言 * @param scriptPath 腳本絕對(duì)路勁 * @param base64Path base64文件絕對(duì)路徑 * @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('腳本調(diào)用失敗'); } } 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轉(zhuǎn)換為字節(jié)流’’’def convert_base64_to_byte_stream(base64_str): # 1.解碼Base64字符串 img_data = base64.b64decode(base64_str) # 2.將節(jié)碼結(jié)果轉(zhuǎn)為字節(jié)流 byte_stream = BytesIO(img_data) return byte_stream’’’從將字節(jié)流解析二維碼’’’def parse_byte_stream_qr_code(byte_stream): # 3.打開(kāi)字節(jié)流得到圖片對(duì)象 img = Image.open(byte_stream) img = ImageEnhance.Brightness(img).enhance(2.0) #增加亮度 img = ImageEnhance.Contrast(img).enhance(4.0) #增加對(duì)比度 # img = ImageEnhance.Sharpness(img).enhance(17.0) #銳利化 # img = img.convert(’L’) #灰度化 # img.show() # 播放圖片,供測(cè)試用 # 4.調(diào)用pyzbar解析圖片中的二維碼 barcodes = pyzbar.decode(img) # 5.打印解析結(jié)果 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)

三、主要坑點(diǎn)

圖片轉(zhuǎn)base64后,得到的字符串太長(zhǎng),不能直接以命令參數(shù)的形式傳遞,所以必須將其寫(xiě)入臨時(shí)文件,然后python腳本讀取臨時(shí)文件進(jìn)行解析 若將python腳本放在項(xiàng)目中,項(xiàng)目打成jar包后,無(wú)法定位腳本路徑,導(dǎo)致執(zhí)行失敗,所以必須將腳本放在jar包外,以配置的形式將路徑傳遞給java項(xiàng)目

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
影音先锋国产精品| 日韩在线不卡| 国产精品试看| 制服诱惑一区二区| 亚洲综合二区| 视频在线观看一区| 一区二区日韩免费看| 亚洲一区二区毛片| 玖玖精品视频| 亚洲一区av| 四虎国产精品免费久久| 日韩中文字幕区一区有砖一区 | 国产精品一区二区av交换| 日本不卡高清视频| 国产日本精品| 久久麻豆视频| 日韩久久精品网| 亚洲男女av一区二区| 亚洲综合二区| 国产免费av国片精品草莓男男| 欧美极品中文字幕| 天堂av在线| 国产亚洲一区在线| 午夜电影一区| 国产精品久久久久久久久免费高清 | 国产精品av一区二区| 国产亚洲在线观看| 日韩精品免费一区二区夜夜嗨| 国产精品chinese| 欧美二三四区| 噜噜噜躁狠狠躁狠狠精品视频 | 香蕉国产精品| 日韩精品一区二区三区免费视频| 国产伦一区二区三区| 色爱综合网欧美| 99久精品视频在线观看视频| 日韩中文字幕一区二区三区| 国产精品亚洲欧美一级在线| 精品一区二区三区四区五区| 日韩精品影视| 一区二区三区网站| 欧美日韩夜夜| 动漫av一区| 伊人久久大香线蕉av超碰演员| 亚洲精品国模| 欧美激情三区| 欧美va天堂| 欧美在线91| 国产成人精品999在线观看| 欧美日韩一二三四| 青草久久视频| www.九色在线| 综合亚洲色图| 日韩在线观看一区| 亚洲精品九九| 精品亚洲美女网站| 日韩视频一二区| 欧洲av不卡| 综合在线一区| 欧美日韩精品在线一区| 日韩一区二区三区四区五区 | 国产激情欧美| 99riav国产精品| 久久精品国产在热久久| 99国产精品私拍| 精品一区二区三区免费看 | 欧美在线网站| 麻豆中文一区二区| 丝袜亚洲另类欧美| 国产精品久久久久久久久妇女| 日韩中文字幕区一区有砖一区| 国产一区二区三区天码| 亚洲免费福利一区| 国产精品777777在线播放| 国产一在线精品一区在线观看| 国产精品久久久久久久久久白浆 | 婷婷丁香综合| 精品国产鲁一鲁****| 蜜桃91丨九色丨蝌蚪91桃色| 日韩欧美网址| 国产精品一区二区三区av麻| 久久国产电影| 久久伊人亚洲| 欧美在线首页| 亚洲一区国产| 桃色一区二区| 麻豆精品新av中文字幕| 蜜芽一区二区三区| 国产99久久| 天堂а√在线最新版中文在线| 国产乱人伦精品一区| 亚洲综合日本| 激情欧美国产欧美| 黄色在线观看www| 久久精品伊人| 国产精品视频一区二区三区综合| 一区在线视频观看| 播放一区二区| 激情国产在线| 三上亚洲一区二区| 精品三级av| 国产经典一区| 国产亚洲字幕| 日韩av在线免费观看不卡| 香蕉久久久久久久av网站| 久久激情一区| 久久裸体视频| 成人精品亚洲| 免费污视频在线一区| 国产69精品久久| 精品一区不卡| 麻豆久久一区| 久久99偷拍| 国产精品tv| 国产精品白浆| 美女视频黄久久| 久久不见久久见中文字幕免费| 欧美欧美黄在线二区| 日韩**一区毛片| 97久久亚洲| 国产精品亚洲综合久久| 日韩高清一区在线| 日韩精品第二页| 日韩高清一区在线 | 日韩一区精品| 日韩欧美2区| 91亚洲精品视频在线观看| 日韩激情网站| 日本欧美一区二区在线观看| 天海翼亚洲一区二区三区| 日韩一区二区三区高清在线观看| 亚洲精品一级| 日韩成人午夜精品| 日韩在线成人| 国产日韩一区二区三区在线播放| 婷婷亚洲精品| 日韩超碰人人爽人人做人人添| 日本成人精品| 国产精品国码视频| 欧美日韩xxxx| 另类欧美日韩国产在线| 久久男人av资源站| 99久久久国产精品美女| 午夜亚洲精品| 日本免费一区二区视频| 欧美成a人片免费观看久久五月天| 免费在线欧美黄色| 综合日韩av| 亚洲激情社区| 婷婷精品在线| 麻豆免费精品视频| 日韩精品dvd| 狠狠色综合网| 日欧美一区二区| 国产精品天天看天天狠| 日韩欧美视频专区| 日韩中文欧美在线| 欧美激情99| 久久久精品午夜少妇| 久久亚洲影院| 美腿丝袜亚洲一区| 久久国产电影| 日本精品国产| 91亚洲国产高清| 在线亚洲成人| 国产日本亚洲| 久久一区二区中文字幕| 蜜桃久久久久久| 久久99高清| 国产二区精品| 欧美一区自拍| 久久久精品网| 欧美一级二区| 久久精选视频| 欧美一区网站| 麻豆精品蜜桃| 日本欧美一区二区| 另类专区亚洲| 亚洲乱码久久| 麻豆视频在线观看免费网站黄| 亚洲一区区二区| 久久精品一区二区三区中文字幕| 亚洲免费黄色| 国产精品久久亚洲不卡| 欧美福利一区| 国产精品多人| 欧美成人综合| 久久精品资源| 亚洲天堂免费| 久久久久99| 国产精品高潮呻吟久久久久| 欧美理论视频| 欧美经典一区| 免费观看日韩电影| 国产成人免费av一区二区午夜| 蜜乳av另类精品一区二区| 国产一区不卡| 日韩av不卡一区二区| 99久久精品网| 国产精品成人**免费视频|