1. 程式人生 > 其它 >postman 顯示base64碼圖片_開發者最喜愛的圖片編碼格式:opencv編碼,解碼,顯示base64圖片...

postman 顯示base64碼圖片_開發者最喜愛的圖片編碼格式:opencv編碼,解碼,顯示base64圖片...

postman 顯示base64碼圖片_開發者最喜愛的圖片編碼格式:opencv編碼,解碼,顯示base64圖片...

蔣寶寶 2021-02-04 00:14:51 740 收藏
文章標籤: postman 顯示base64碼圖片
版權
由於圖片格式尺寸較大,在網際網路上若想傳遞一張圖片,往往會 把圖片進行格式轉換,然後進行資料傳輸,圖片格式往往會轉換為base64編碼圖片

base64編碼圖片

BASE64編碼表

base64編碼 是將資料用 64 個可列印的字元進行編碼的方式,任何資料底層實現都是二進位制,所以都可以進行 base64編碼,base64編碼 主要用在資料傳輸過程中(編碼、解碼)

Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一,Base64編碼可用於在HTTP環境下傳遞較長的標識資訊。採用Base64編碼具有不可讀性,即所編碼的資料不會被人用肉眼所直接看到。在MIME格式的電子郵件中,base64可以用來將binary的位元組序列資料編碼成ASCII字元序列構成的文字。使用時,在傳輸編碼方式中指定base64。使用的字元包括大小寫字母各26個,加上10個數字,和加號“+”,斜槓“/”,一共64個字元,等號“=”用來作為字尾用途。Base64編碼要求把3個8位位元組(3*8=24)轉化為4個6位的位元組(4*6=24),之後在6位的前面補兩個0,形成8位一個位元組的形式。 如果剩下的字元不足3個位元組,則用0填充,輸出字元使用'=',因此編碼後輸出的文字末尾可能會出現1或2個'='。為了保證所輸出的編碼位可讀字元,Base64制定了一個編碼表,以便進行統一轉換。編碼表的大小為2^6=64,這也是Base64名稱的由來。

支援 PNG、GIF、JPG、BMP、ICO 格式。


ASCII對照表

Base64編碼要求把3個8位位元組(3*8=24)轉化為4個6位的位元組(4*6=24),之後在6位的前面補兩個0,形成8位一個位元組的形式。 如果剩下的字元不足3個位元組,則用0填充,輸出字元使用’=’,因此編碼後輸出的文字末尾可能會出現1或2個’=’通過base64編碼原理我們知道,base64的圖片字元流中的每8個字元就有兩個是用0補充,而且字元流的末尾還可能存在‘=’號,我們可以通過這個原理計算圖片的檔案流大小。

具體步驟:

按照base64編碼hello單詞

先找到每個字元對應的ASCII碼,再將其轉化為8位的二進位制,轉化如下:
H 對應碼值72,對應的二進位制 01001000
e對應碼值101,對應的二進位制:01100101
l對應碼值108,對應的二進位制:01101100
l對應碼值108,對應的二進位制:01101100
o對應碼值111,對應的二進位制:01101111
檢視字元是否是3的倍數,若不是,差一位,在後面補00000000,差2位,補00000000 00000000,這裡最多差2位,不要問我為什麼
base64的碼值是0-63,所以用6位的二進位制就可以完全表示base64的碼值(如:000000對應十進位制0,111111對應的十進位制為63),將上面8位一組的二進位制變成6位一組的二進位制
轉換前:01001000 01100101 01101100 01101100 01101111 00000000

轉換後:010010 000110 010101 101100 011011 000110 111100 000000

然後將6位一組的二進位制高位補00(湊夠8位)計算出十進位制,再跟base64的編碼表做對比,再將最後補位的0變成=,即可得到base64字元
00010010 對應十進位制:18, 18對應base64字元:S

00000110 對應十進位制:6, 6對應base64字元:G

00010101 對應十進位制:21, 21對應base64字元:V

00101100 對應十進位制:44, 44對應base64字元:s

00011011 對應十進位制:27, 27對應base64字元:b

00000110 對應十進位制:6, 6對應base64字元:G

00111100 對應十進位制:18, 18對應base64字元:8

00000000 補位的0變成=(最後最多出現2個等號)

所以Hello對應的base64編碼就是:SGVsbG8=

圖片的處理過程跟字元處理類似

接受base64圖片資料
BA base64_pic = img_base64 # 接受圖片資料 # 處理圖片 pic = base64.b64decode(base64_pic) nparr = np.fromstring(pic, np.uint8) img = cv2.imdecode(nparr, cv2.COLOR_BGR2RGB)
img_base64為網際網路上一張經過base64編碼的圖片

base64.b64decode(base64_pic)拿到圖片後,我們首先進行base64解碼

np.fromstring使用此函式獲取圖片字串的資訊

cv2.imdecode 從指定的記憶體快取中讀取資料,並把資料轉換(解碼)成影象格式;主要用於從網路傳輸資料中恢復出影象

得到圖片後,我們就可以使用opencv 來處理圖片了,你可以使用cv.imshow()函式來檢視圖片

傳輸base64圖片
待處理完成圖片後,我們需要把圖片再次轉換為base64圖片格式傳輸給網際網路

image = cv2.imencode('.jpg', img)[1]img = str(base64.b64encode(image))[2:-1]
cv2.imencode將圖片格式轉換(編碼)成流資料,賦值到記憶體快取中;主要用於影象資料格式的壓縮,方便網路傳輸

base64.b64encode進行圖片的base64編碼,進行圖片的傳輸
————————————————
版權宣告:本文為CSDN博主「蔣寶寶」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_33724759/article/details/113628149