最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python關(guān)于圖片和base64互轉(zhuǎn)的三種方式

 更新時(shí)間:2024年09月14日 11:25:06   作者:臉不大的CVer  
無論使用cv2、PIL還是直接讀取圖片的方法進(jìn)行圖片與Base64的轉(zhuǎn)換,核心步驟都涉及到二進(jìn)制格式的轉(zhuǎn)換,每種方法的基本過程都是:Base64轉(zhuǎn)二進(jìn)制,然后二進(jìn)制轉(zhuǎn)圖片,或反向操作,這些方法均基于二進(jìn)制與圖片轉(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é)

無論使用哪種方式進(jìn)行圖片和base64的互相轉(zhuǎn)換,都需要中間變量——二進(jìn)制格式。

基本過程都為:base64 <——> 二進(jìn)制 <——> 圖片

其中使用到了我的另一篇文章二進(jìn)制和圖片互相轉(zhuǎn)換的三種方式

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python數(shù)據(jù)處理67個(gè)pandas函數(shù)總結(jié)看完就用

    python數(shù)據(jù)處理67個(gè)pandas函數(shù)總結(jié)看完就用

    這篇文章主要介紹了python數(shù)據(jù)處理67個(gè)pandas函數(shù)的梳理總結(jié),看完就可以去用了,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 最新評(píng)論

    定安县| 杭州市| 卓资县| 胶州市| 沅陵县| 陈巴尔虎旗| 房产| 克拉玛依市| 黑水县| 柞水县| 遵化市| 西盟| 息烽县| 苗栗县| 高尔夫| 伊金霍洛旗| 新宁县| 沙洋县| 京山县| 肥乡县| 科技| 阳山县| 南溪县| 通榆县| 玛多县| 岑巩县| 沾益县| 吕梁市| 股票| 汉川市| 子洲县| 营山县| 环江| 定陶县| 泰来县| 收藏| 中卫市| 阿拉善盟| 博罗县| 驻马店市| 龙江县|