在我的rtf文档中,我想从字符串中提取图像:字符串是这样的:
\pard\pard\qc{\*\shppict{\pict\pngblip\picw320\pich192\picwgoal0\pichgoal0
89504e470d0a1a0a0000000d4948445200000140000000c00802000000fa352d9100000e2949444[.....]6c4f0000000049454e44ae426082
}}
Run Code Online (Sandbox Code Playgroud)
问题:1)这真的是base64吗?
2)如何使用下面的代码解码它.
import base64
imgData = b"base64code00from007aove007string00bcox007idont007know007where007it007starts007and007ends"
with open("imageToSave.png", "wb") as fh:
fh.write(base64.decodestring(imgData))
Run Code Online (Sandbox Code Playgroud)
完整的rtf文本(保存为.rtf显示图像时)位于:
不,那不是Base64编码的数据.它是十六进制的.来自维基百科关于RTF格式的文章:
RTF支持包含JPEG,便携式网络图形(PNG),增强型图元文件(EMF),Windows图元文件(WMF),Apple PICT,Windows设备相关位图,Windows设备无关位图和十六进制OS/2图元文件图片类型(默认)或RTF文件中的二进制格式.
该binascii.unhexlify()函数将为您解码回二进制图像数据; 你有一个PNG图像:
>>> # data contains the hex data from your link, newlines removed
...
>>> from binascii import unhexlify
>>> r = unhexlify(data)
>>> r[:20]
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01@'
>>> from imghdr import test_png
>>> test_png(r, None)
'png'
Run Code Online (Sandbox Code Playgroud)
但当然这\pngblip条目是一个线索.我不会在这里包含图像,它是一个相当沉闷的8位320x192黑色矩形.
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |