<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
用記事本開啟exe、jpg、pdf這些檔案時,我們都會看到一大堆亂碼,因為二進位制檔案包含很多無法顯示和列印的字元,所以,如果要讓記事本這樣的文書處理軟體能處理二進位制資料,就需要一個二進位制到字串的轉換方法。Base64是一種最常見的二進位制編碼方法。
Base64是一種任意二進位制到文字字串的編碼方法,常用於在URL、Cookie、網頁中傳輸少量二進位制資料。Base64是一種用64個字元來表示任意二進位制資料的方法,原理很簡單,首先,準備一個包含64個字元的陣列['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
,然後,對二進位制資料進行處理,每3個位元組一組,一共是3x8=24bit,劃為4組,每組正好6個bit,這樣我們得到4個數位作為索引,然後查表,獲得相應的4個字元,就是編碼後的字串。
每組6位->6位二進位制取值範圍為:000000-111111(0-63)正好可以取到64個字元
所以,Base64編碼會把3位元組的二進位制資料編碼為4位元組的文字資料,長度增加33%,好處是編碼後的文字資料可以在郵件正文、網頁等直接顯示。如果要編碼的二進位制資料不是3的倍數,最後會剩下1個或2個位元組怎麼辦?Base64用x00
位元組在末尾補足後,再在編碼的末尾加上1個或2個=號,表示補了多少位元組,解碼的時候,會自動去掉。
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編碼後可能出現字元+
和/
,在URL中就不能直接作為引數,所以又有一種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中的引數都是位元組的形式,因此上方中引數byte_str
前有個b
將圖片(視訊)編碼成字串
如下程式碼,將一張圖片編碼成字串,後面我們可以將圖片直接以字串的形式儲存到檔案中,方便讀取,因為有些情況下存取字串會比直接儲存圖片方便,比如先把圖片存放到資料庫中
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編碼內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45