python關(guān)于圖片和base64互轉(zhuǎn)的三種方式
通過cv2進(jìn)行轉(zhuǎn)換
import cv2
import base64
import numpy as np
def img_to_base64(img_array):
# 傳入圖片為RGB格式numpy矩陣,傳出的base64也是通過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é)果顯示:



通過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)制格式。
基本過程都為: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)文章
python常用request庫(kù)與lxml庫(kù)操作方法整理總結(jié)
一路學(xué)習(xí),一路總結(jié),技術(shù)就是這樣,應(yīng)用之后,在進(jìn)行整理,才可以加深印象。本篇文字為小節(jié)篇,核心總結(jié) requests 庫(kù)與 lxml 庫(kù)常用的操作2021-08-08
Python爬蟲實(shí)例——爬取美團(tuán)美食數(shù)據(jù)
這篇文章主要介紹了Python爬蟲如何爬取美團(tuán)美食數(shù)據(jù),文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Python實(shí)現(xiàn)SRT字幕文件合并的實(shí)戰(zhàn)教程
這篇文章將探索如何通過Python腳本 Srt_Shift.py 來讀取、處理時(shí)間戳、合并字幕條目,并將合并后的字幕保存到新的SRT文件中,感興趣的小伙伴可以了解下2025-11-11
python根據(jù)list重命名文件夾里的所有文件實(shí)例
今天小編就為大家分享一篇python根據(jù)list重命名文件夾里的所有文件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
python 利用Pyinstaller打包Web項(xiàng)目
這篇文章主要介紹了python 利用Pyinstaller打包Web項(xiàng)目,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-10-10
健身房被搭訕?用python寫了個(gè)小米計(jì)時(shí)器助人為樂
今天教大家Python圖形界面開發(fā)的相關(guān)知識(shí),文章圍繞著如何實(shí)現(xiàn)一個(gè)小米手機(jī)上的秒表計(jì)時(shí)器功能展開,文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下2021-06-06
Python基于輾轉(zhuǎn)相除法求解最大公約數(shù)的方法示例
這篇文章主要介紹了Python基于輾轉(zhuǎn)相除法求解最大公約數(shù)的方法,結(jié)合實(shí)例形式分析了Python使用輾轉(zhuǎn)相除法求解最大公約數(shù)的實(shí)現(xiàn)方法與優(yōu)化操作技巧,需要的朋友可以參考下2018-04-04
python數(shù)據(jù)處理67個(gè)pandas函數(shù)總結(jié)看完就用

