从rtf解码base64图像

Rah*_*hul 0 python base64 rtf

在我的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显示图像时)位于:

http://hastebin.com/axabazaroc.tex

Mar*_*ers 5

不,那不是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黑色矩形.