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

python中base64編碼簡介

 更新時間:2022年12月02日 14:38:47   作者:orangerfun  
Base64是一種任意二進制到文本字符串的編碼方法,常用于在URL、Cookie、網頁中傳輸少量二進制數(shù)據(jù),Base64是一種用64個字符來表示任意二進制數(shù)據(jù)的方法,這篇文章主要介紹了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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

永年县| 缙云县| 绥化市| 沙雅县| 桦川县| 利津县| 远安县| 八宿县| 闸北区| 五大连池市| 和龙市| 营山县| 威远县| 卓资县| 峨山| 荣成市| 枞阳县| 屏南县| 淮南市| 奉化市| 阳泉市| 宁晋县| 洪雅县| 延津县| 丹东市| 中西区| 柳江县| 江陵县| 沽源县| 陕西省| 云和县| 富宁县| 保靖县| 原平市| 濮阳县| 台湾省| 崇明县| 江油市| 南安市| 都匀市| 闽清县|