python關(guān)于圖片和base64互轉(zhuǎn)的三種方式
通過(guò)cv2進(jìn)行轉(zhuǎn)換
import cv2 import base64 import numpy as np def img_to_base64(img_array): # 傳入圖片為RGB格式numpy矩陣,傳出的base64也是通過(guò)RGB的編碼 img_array = cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR) #RGB2BGR,用于cv2編碼 encode_image = cv2.imencode(".jpg", img_array)[1] #用cv2壓縮/編碼,轉(zhuǎn)為一維數(shù)組 byte_data = encode_image.tobytes() #轉(zhuǎn)換為二進(jìn)制 base64_str = base64.b64encode(byte_data).decode("ascii") #轉(zhuǎn)換為base64 return base64_str def base64_to_img(base64_str): # 傳入為RGB格式下的base64,傳出為RGB格式的numpy矩陣 byte_data = base64.b64decode(base64_str)#將base64轉(zhuǎn)換為二進(jìn)制 encode_image = np.asarray(bytearray(byte_data), dtype="uint8")# 二進(jìn)制轉(zhuǎn)換為一維數(shù)組 img_array = cv2.imdecode(encode_image, cv2.IMREAD_COLOR)# 用cv2解碼為三通道矩陣 img_array = cv2.cvtColor(img_array, cv2.COLOR_BGR2RGB)# BGR2RGB return img_array
方法調(diào)用:
img = np.zeros((100,100,3), dtype=np.uint8) img[:,:,2]=255 base64_img = img_to_base64(img) img_from_base64 = base64_to_img(base64_img)
結(jié)果顯示:
通過(guò)PIL進(jìn)行轉(zhuǎn)換
from io import BytesIO from PIL import Image import base64 def image_to_base64(image): # 輸入為PIL讀取的圖片,輸出為base64格式 byte_data = BytesIO()# 創(chuàng)建一個(gè)字節(jié)流管道 image.save(byte_data, format="JPEG")# 將圖片數(shù)據(jù)存入字節(jié)流管道 byte_data = byte_data.getvalue()# 從字節(jié)流管道中獲取二進(jìn)制 base64_str = base64.b64encode(byte_data).decode("ascii")# 二進(jìn)制轉(zhuǎn)base64 return base64_str def base64_to_image(base64_str): # 輸入為base64格式字符串,輸出為PIL格式圖片 byte_data = base64.b64decode(base64_str) # base64轉(zhuǎn)二進(jìn)制 image = Image.open(BytesIO(byte_data)) # 將二進(jìn)制轉(zhuǎn)為PIL格式圖片 return image
方法調(diào)用:
img = np.zeros((100,100,3),dtype=np.uint8) img[:,:,2]=255 image = Image.fromarray(img) base64_str = image_to_base64(image) image_from_base64=base64_to_image(base64_str)
結(jié)果顯示:
直接讀取圖片方式
import base64 def path2base64(path): with open(path,"rb") as f: byte_data = f.read() base64_str = base64.b64encode(byte_data).decode("ascii")# 二進(jìn)制轉(zhuǎn)base64 return base64_str
方法調(diào)用:
base64_img = path2base64("1.jpg") img_from_base64 = base64_to_img(base64_img)
總結(jié)
無(wú)論使用哪種方式進(jìn)行圖片和base64的互相轉(zhuǎn)換,都需要中間變量——二進(jìn)制格式。
基本過(guò)程都為:base64 <——> 二進(jìn)制 <——> 圖片
其中使用到了我的另一篇文章二進(jìn)制和圖片互相轉(zhuǎn)換的三種方式
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python實(shí)現(xiàn)圖片和base64轉(zhuǎn)換詳解
- Python OpenCV實(shí)現(xiàn)傳統(tǒng)圖片格式與base64轉(zhuǎn)換
- python將圖片轉(zhuǎn)base64,實(shí)現(xiàn)前端顯示
- Python 實(shí)現(xiàn)opencv所使用的圖片格式與 base64 轉(zhuǎn)換
- Python實(shí)現(xiàn)base64編碼的圖片保存到本地功能示例
- python將圖片文件轉(zhuǎn)換成base64編碼的方法
- python獲得圖片base64編碼示例
- Python如何讀取base64圖片數(shù)據(jù)
相關(guān)文章
OpenCV特征提取與檢測(cè)之Harris角點(diǎn)檢測(cè)
這篇文章主要給大家介紹了關(guān)于OpenCV特征提取與檢測(cè)之Harris角點(diǎn)檢測(cè)的相關(guān)資料,Harris角點(diǎn)檢測(cè)的目的是去分辨出圖像中的平面、邊界以及角點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08PyQt5實(shí)現(xiàn)簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了用PyQt5開(kāi)發(fā)一個(gè)簡(jiǎn)易的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03PyQt5 實(shí)現(xiàn)狀態(tài)欄永久顯示消息
這篇文章主要介紹了PyQt5 實(shí)現(xiàn)狀態(tài)欄永久顯示消息的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03python中enumerate函數(shù)用法實(shí)例分析
這篇文章主要介紹了python中enumerate函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了enumerate函數(shù)的功能、定義及使用技巧,需要的朋友可以參考下2015-05-05在Python反編譯中批量pyc轉(zhuǎn)?py的實(shí)現(xiàn)代碼
這篇文章主要介紹了在Python反編譯中批量pyc轉(zhuǎn)?py的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Python如何使用opencv進(jìn)行手勢(shì)識(shí)別詳解
目前,人們正需要研發(fā)以人為中心進(jìn)行計(jì)算機(jī)交互控制,所以下面這篇文章主要給大家介紹了關(guān)于Python如何使用opencv進(jìn)行手勢(shì)識(shí)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01macbook安裝環(huán)境chatglm2-6b的詳細(xì)過(guò)程
這篇文章主要介紹了macbook安裝chatglm2-6b的過(guò)程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07