簡體   English   中英

無法將 base64 字符串轉換為圖像

[英]Cannot convert base64 string into image

有人可以幫我把這個 base64 數據轉換成圖像嗎? 我不知道是因為數據沒有正確解碼還是其他原因。 這是我解碼數據的方式:

import base64

c_data = { the data in the link (string type) }

c_decoded = base64.b64decode(c_data)

但它給出了錯誤填充不正確所以我按照一些教程嘗試了不同的方法來解碼數據。

c_decoded = base64.b64decode(c_data + '=' * (-len(c_data) % 4))

c_decoded = base64.b64decode(c_data + '=' * ((4 - len(c_data) % 4) % 4)

兩種方式都解碼了數據而沒有給出錯誤 Incorrect Padding 但現在我無法將解碼數據轉換為圖像。
我嘗試創建一個空的 png,然后將解碼后的數據寫入其中:

from PIL import Image

with open('c.png', 'wb') as f:
    f.write(c_decoded)
image = Image.open('c.png')
image.show()

它沒有工作並給出了錯誤:無法識別圖像文件“c.png”
我試過使用 BytesIO:

from PIL import Image
import io
from io import BytesIO

image = Image.open(io.BytesIO(c_decoded))
image.show()

現在它給出了錯誤:無法識別圖像文件 <_io.BytesIO object at 0x0000024082B20270>
請幫我。

不確定您是否確實需要 Python 解決方案,或者您只是想像問題的第一行所說的那樣幫助解碼圖像,並且您認為可能需要 Python。

如果是后者,您可以在終端中使用ImageMagick

cat YOURFILE.TXT | magick inline:- result.png

在此處輸入圖像描述

或者等價地避免“貓的無用使用”

magick inline:- result.png < YOURFILE.TXT

如果是前者,你可以使用這樣的東西(未經測試):

from urllib import request

with request.urlopen('data:image/png;base64,iVBORw0...')  as response:
   im = response.read()

現在im包含一個 PNG 編碼的 [^1] 圖像,因此您可以這樣保存到磁盤:

with open('result.png','wb') as f:
    f.write(im)

或者,您可以將其包裝在BytesIO中並打開為PIL Image

from io import BytesIO
from PIL import Image

pilImage = Image.open(BytesIO(im))

[^1]:請注意,我盲目地假設它是 PNG,也可能是 JPEG,因此您最好查看 DataURI 的開頭以確定用於保存文件的合適擴展名。

感謝@jps 解釋了為什么我的代碼不起作用。 查看@Mark Setchell 解決方案,了解解碼 base64 數據的可靠方法(他的代碼修復了@jps 指出的我的錯誤)

所以基本上去掉base64字符串開頭的[data:image/png;base64,]因為它只是數據的格式。 改變這個:

c = "data:image/png;base64,iVBORw0KGgoAAAANSUh..."

對此:

c = "iVBORw0KGgoAAAANSUh..."

現在我們可以使用

c_decoded = base64.b64decode(c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM