python關于圖片和base64互轉的三種方式
更新時間:2024年09月14日 11:25:06 作者:臉不大的CVer
無論使用cv2、PIL還是直接讀取圖片的方法進行圖片與Base64的轉換,核心步驟都涉及到二進制格式的轉換,每種方法的基本過程都是:Base64轉二進制,然后二進制轉圖片,或反向操作,這些方法均基于二進制與圖片轉換的基本原理
通過cv2進行轉換
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壓縮/編碼,轉為一維數組 byte_data = encode_image.tobytes() #轉換為二進制 base64_str = base64.b64encode(byte_data).decode("ascii") #轉換為base64 return base64_str def base64_to_img(base64_str): # 傳入為RGB格式下的base64,傳出為RGB格式的numpy矩陣 byte_data = base64.b64decode(base64_str)#將base64轉換為二進制 encode_image = np.asarray(bytearray(byte_data), dtype="uint8")# 二進制轉換為一維數組 img_array = cv2.imdecode(encode_image, cv2.IMREAD_COLOR)# 用cv2解碼為三通道矩陣 img_array = cv2.cvtColor(img_array, cv2.COLOR_BGR2RGB)# BGR2RGB return img_array
方法調用:
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)
結果顯示:
通過PIL進行轉換
from io import BytesIO from PIL import Image import base64 def image_to_base64(image): # 輸入為PIL讀取的圖片,輸出為base64格式 byte_data = BytesIO()# 創(chuàng)建一個字節(jié)流管道 image.save(byte_data, format="JPEG")# 將圖片數據存入字節(jié)流管道 byte_data = byte_data.getvalue()# 從字節(jié)流管道中獲取二進制 base64_str = base64.b64encode(byte_data).decode("ascii")# 二進制轉base64 return base64_str def base64_to_image(base64_str): # 輸入為base64格式字符串,輸出為PIL格式圖片 byte_data = base64.b64decode(base64_str) # base64轉二進制 image = Image.open(BytesIO(byte_data)) # 將二進制轉為PIL格式圖片 return image
方法調用:
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)
結果顯示:
直接讀取圖片方式
import base64 def path2base64(path): with open(path,"rb") as f: byte_data = f.read() base64_str = base64.b64encode(byte_data).decode("ascii")# 二進制轉base64 return base64_str
方法調用:
base64_img = path2base64("1.jpg") img_from_base64 = base64_to_img(base64_img)
總結
無論使用哪種方式進行圖片和base64的互相轉換,都需要中間變量——二進制格式。
基本過程都為:base64 <——> 二進制 <——> 圖片
其中使用到了我的另一篇文章二進制和圖片互相轉換的三種方式
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
macbook安裝環(huán)境chatglm2-6b的詳細過程
這篇文章主要介紹了macbook安裝chatglm2-6b的過程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07