python圖片和二進(jìn)制轉(zhuǎn)換的三種實(shí)現(xiàn)方式
PIL格式轉(zhuǎn)二進(jìn)制
先讀取為PIL格式,再轉(zhuǎn)為二進(jìn)制
import io import base64 from PIL import Image def image2byte(image): ''' 圖片轉(zhuǎn)byte image: 必須是PIL格式 image_bytes: 二進(jìn)制 ''' # 創(chuàng)建一個(gè)字節(jié)流管道 img_bytes = io.BytesIO() # 將圖片數(shù)據(jù)存入字節(jié)流管道, format可以按照具體文件的格式填寫 image.save(img_bytes, format="JPEG") # 從字節(jié)流管道中獲取二進(jìn)制 image_bytes = img_bytes.getvalue() return image_bytes def byte2image(byte_data): ''' byte轉(zhuǎn)為圖片 byte_data: 二進(jìn)制 ''' image = Image.open(io.BytesIO(byte_data)) return image
調(diào)用代碼
image_path = "img/3.jpg" image = Image.open(image_path) byte_data = image2byte(image) image2 = byte2image(byte_data)
數(shù)組轉(zhuǎn)二進(jìn)制
先用opencv讀取為數(shù)組格式,再轉(zhuǎn)為二進(jìn)制
def numpy2byte(image): ''' 數(shù)組轉(zhuǎn)二進(jìn)制 image : numpy矩陣/cv格式圖片 byte_data:二進(jìn)制數(shù)據(jù) ''' #對(duì)數(shù)組的圖片格式進(jìn)行編碼 success,encoded_image = cv2.imencode(".jpg",image) #將數(shù)組轉(zhuǎn)為bytes byte_data = encoded_image.tobytes() return byte_data def byte2numpy(byte_data): ''' byte轉(zhuǎn)numpy矩陣/cv格式 byte_data:二進(jìn)制數(shù)據(jù) image : numpy矩陣/cv格式圖片 ''' image = np.asarray(bytearray(byte_data), dtype="uint8") image = cv2.imdecode(image, cv2.IMREAD_COLOR) return image
調(diào)用代碼
image_path = "img/3.jpg" image = cv2.imread(image_path) byte_data = numpy2byte(image) image2 = byte2numpy(byte_data)
圖片轉(zhuǎn)二進(jìn)制
直接讀取圖片為二進(jìn)制
import cv2 import numpy as np def read2byte(path): ''' 圖片轉(zhuǎn)二進(jìn)制 path:圖片路徑 byte_data:二進(jìn)制數(shù)據(jù) ''' with open(path,"rb") as f: byte_data = f.read() return byte_data def byte2numpy(byte_data): ''' byte轉(zhuǎn)numpy矩陣/cv格式 byte_data:二進(jìn)制數(shù)據(jù) image : numpy矩陣/cv格式圖片 ''' image = np.asarray(bytearray(byte_data), dtype="uint8") image = cv2.imdecode(image, cv2.IMREAD_COLOR) return image
調(diào)用代碼
image_path = "img/3.jpg" byte_data = read2byte(image_path) image = byte2numpy(byte_data)
延伸
有時(shí)候數(shù)據(jù)傳輸規(guī)定轉(zhuǎn)換為base64格式,可以參考我的另一篇文章 圖片和base64轉(zhuǎn)換的三種方式
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法
本文主要介紹了Django+Nginx+uWSGI 定時(shí)任務(wù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01python3實(shí)現(xiàn)微型的web服務(wù)器
這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)一個(gè)微型的web服務(wù)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09Python尾遞歸優(yōu)化實(shí)現(xiàn)代碼及原理詳解
這篇文章主要介紹了Python尾遞歸優(yōu)化實(shí)現(xiàn)代碼及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10python算法學(xué)習(xí)雙曲嵌入論文代碼實(shí)現(xiàn)數(shù)據(jù)集介紹
由于雙曲嵌入相關(guān)的文章已經(jīng)有了一系列的代碼。本篇博客主要目的實(shí)現(xiàn)最開始的雙曲嵌入論文,將論文中有些直接寫出來的內(nèi)容進(jìn)行了細(xì)節(jié)的推導(dǎo),同時(shí)實(shí)現(xiàn)對(duì)應(yīng)的代碼2021-11-11Python學(xué)習(xí)Turtle庫畫對(duì)稱勾股樹體會(huì)分形驚艷
這篇文章主要為大家介紹了Python學(xué)習(xí)中如何使用Turtle庫畫對(duì)稱勾股樹,從而體會(huì)到分形世界的驚艷,文中附含詳細(xì)示例代碼有需要的朋友可以借鑒參考下2021-09-09Pycharm正版2022.2.2?官方翻譯插件更新tkk失敗不能用問題及解決方案
這篇文章主要介紹了Pycharm正版2022.2.2?|?官方翻譯插件更新tkk失敗解決,?出現(xiàn)tkk問題的是這個(gè)翻譯插件,本教程只解決該翻譯插件不能用的問題,需要的朋友可以參考下2022-11-11python中圖形庫turtle庫詳解(適用于計(jì)算機(jī)二級(jí))
Turtle庫是Python語言中的一個(gè)圖形庫,可以用來繪制各種形狀,如線條、矩形、圓形等等,下面這篇文章主要給大家介紹了關(guān)于python中圖形庫turtle庫的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08分析用Python腳本關(guān)閉文件操作的機(jī)制
這篇文章主要介紹了分析用Python腳本關(guān)閉文件操作的機(jī)制,作者分Python2.x版本和3.x版本兩種情況進(jìn)行了闡述,需要的朋友可以參考下2015-06-06