答案1
如果您不害怕运行 Python 脚本,这里有一个快速脚本。
传入一个文本文件,每行包含一张 base64 图像。这将写出一系列图像,例如image0001.png
,,image0002.png
...
import fileinput
import base64
for index, line in enumerate(fileinput.input(), 1):
if line.startswith('data:image/png;base64,'):
with open('image{0:04}.png'.format(index), 'wb') as png:
line = line.strip()
png.write(base64.b64decode(line[22:] + '===='))
将其保存到类似文件中decode.py
,然后使用
python3 decode.py input.txt
如果您的输入文件是只有一列的 CSV,那么它也是一个文本文件,因此您应该能够直接使用它(尽管 CSV 可能需要删除引号)。如果您确实必须在适当的 Excel 电子表格中接受输入,则将其导出到 CSV 是一个手动过程,因此如果可以的话,这是一个避免使用 Excel 的好理由。
根据您的评论,这里尝试使用该xlrd
模块直接读取 Excel,但我(幸运的是)没有任何东西可以测试它。
import base64
import xlrd
workbook = xlrd.open_workbook("images.xlsx")
worksheet = workbook.sheet_by_name("Sheet1")
for idx in range(1, worksheet.nrows+1):
excel_data = worksheet.cell(idx-1,0).value
if excel_data.startswith('data:image/png;base64,'):
with open('image{0:04}.png'.format(idx), 'wb') as png:
png.write(base64.b64decode(excel_data.strip()[22:] + '===='))
您尝试使用 base64 数据而不是指定文件名的excel_data
参数中的索引。从 1 运行到最后一行数据的编号。open
idx
附录: 部分数据似乎有误。我设法使用以下技巧提取了您的图片,但我不确定它是否真的产生了正确的输出——这似乎对我尝试过的图片有效,但它可能会导致损坏,因为我只是删除了最后一个 base64 字符。
import fileinput
import base64
import binascii
for index, line in enumerate(fileinput.input(), 1):
if line.startswith('data:image/png;base64,'):
with open('image{0:04}.png'.format(index), 'wb') as png:
line = line.strip()[22:]
try:
decoded = base64.b64decode(line + '====')
except binascii.Error:
decoded = base64.b64decode(line[0:-1] + '====')
png.write(decoded)
答案2
Python 示例来自堆栈溢出:
import base64
imgdata = base64.b64decode(imgstring)
filename = 'some_image.jpg'
with open(filename, 'wb') as f:
f.write(imgdata)
要导入 Excel 文件,您可以使用xlrd
。Stack Overflow 示例。