python中base64編碼簡介
1. base64編碼簡介
用記事本打開exe、jpg、pdf這些文件時,我們都會看到一大堆亂碼,因為二進制文件包含很多無法顯示和打印的字符,所以,如果要讓記事本這樣的文本處理軟件能處理二進制數(shù)據(jù),就需要一個二進制到字符串的轉換方法。Base64是一種最常見的二進制編碼方法。
Base64是一種任意二進制到文本字符串的編碼方法,常用于在URL、Cookie、網頁中傳輸少量二進制數(shù)據(jù)。Base64是一種用64個字符來表示任意二進制數(shù)據(jù)的方法,原理很簡單,首先,準備一個包含64個字符的數(shù)組['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/'] ,然后,對二進制數(shù)據(jù)進行處理,每3個字節(jié)一組,一共是3x8=24bit,劃為4組,每組正好6個bit,這樣我們得到4個數(shù)字作為索引,然后查表,獲得相應的4個字符,就是編碼后的字符串。
每組6位->6位二進制取值范圍為:000000-111111(0-63)正好可以取到64個字符
所以,Base64編碼會把3字節(jié)的二進制數(shù)據(jù)編碼為4字節(jié)的文本數(shù)據(jù),長度增加33%,好處是編碼后的文本數(shù)據(jù)可以在郵件正文、網頁等直接顯示。如果要編碼的二進制數(shù)據(jù)不是3的倍數(shù),最后會剩下1個或2個字節(jié)怎么辦?Base64用\x00字節(jié)在末尾補足后,再在編碼的末尾加上1個或2個=號,表示補了多少字節(jié),解碼的時候,會自動去掉。
2. python中使用base64
python中直接使用內置包base64即可,base64.b64encode base64.b64decode 分別是編碼和解碼
import base64
if __name__ == "__main__":
bytes_str = b"i love beijing"
# 編碼
# b'aSBsb3ZlIGJlaWppbmc='
base64_string = base64.b64encode(bytes_str)
print(base64_string)
# 解碼
# b'i love beijing'
source_str = base64.b64decode(base64_string)
print(source_str)由于標準的Base64編碼后可能出現(xiàn)字符+ 和/,在URL中就不能直接作為參數(shù),所以又有一種url safe 的base64編碼,其實就是把字符+和/分別變成-和_
bytes_str = b"i love tiananmen" # 編碼 base64_string = base64.urlsafe_b64encode(bytes_str) print(base64_string) # 解碼 source_str = base64.urlsafe_b64decode(base64_string) print(source_str)
注意:無論是哪種編碼方式,輸入到base64中的參數(shù)都是字節(jié)的形式,因此上方中參數(shù)byte_str前有個b
3. 應用
將圖片(視頻)編碼成字符串
如下代碼,將一張圖片編碼成字符串,后面我們可以將圖片直接以字符串的形式保存到文件中,方便讀取,因為有些情況下存取字符串會比直接保存圖片方便,比如先把圖片存放到數(shù)據(jù)庫中
if __name__ == "__main__":
import requests
from PIL import Image
from io import BytesIO
import base64
response = requests.get('https://ts1.cn.mm.bing.net/th/id/R-C.fd4056c8c00979ab8561f8db8219c2ae?rik=JPk67EIYaKIS3A&riu=http%3a%2f%2fimg.mm4000.com%2ffile%2fa%2fa2%2f869bd2bd6a.jpg&ehk=2z%2bPuRHJOYtkm9ICs8fPs0EJbE96jJX2E8QyrVP5kyQ%3d&risl=&pid=ImgRaw&r=0')
if response.status_code != 200:
raise ValueError("request Error!")
# 將請求結果存入io中, 使用PIL以io的方式打開圖片
img = BytesIO(response.content)
pict = Image.open(img)
# 改變圖像大小,也可是其他操作
pict = pict.resize((100, 100), Image.ANTIALIAS)
# 將圖片存入io中, PIL格式的圖片變成byte格式
img_buff = BytesIO()
pict.save(img_buff, "jpeg")
# 使用base64把byte對象編碼成字符串
img_str = base64.urlsafe_b64encode(img_buff.getvalue())
print("image string:", img_str.decode("utf-8"))
img.close()
# 將字符串解碼成圖片
bytes_image = base64.urlsafe_b64decode(img_str)
image_buff = BytesIO(bytes_image)
image = Image.open(image_buff)
image.show()結果如下:

到此這篇關于python中base64編碼的文章就介紹到這了,更多相關python base64編碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用python?pywin32模塊創(chuàng)建windows服務實例探究
這篇文章主要為大家介紹了使用python?pywin32模塊創(chuàng)建windows服務實現(xiàn)實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
tensorflow創(chuàng)建變量以及根據(jù)名稱查找變量
這篇文章主要為大家詳細介紹了tensorflow創(chuàng)建變量以及根據(jù)名稱查找變量,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03
Python算法輸出1-9數(shù)組形成的結果為100的所有運算式
這篇文章主要介紹了Python算法輸出1-9數(shù)組形成的結果為100的所有運算式,然后介紹了另外一個相關實例,具體內容請參閱正文,需要的朋友可以參考下。2017-11-11
Python 中數(shù)組和數(shù)字相乘時的注意事項說明
這篇文章主要介紹了Python 中數(shù)組和數(shù)字相乘時的注意事項說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05

