从rtf解码base64图像

时间:2016-08-24 11:18:08

标签: python base64 rtf

在我的rtf文档中,我想从字符串中提取图像: 字符串是这样的:

    \pard\pard\qc{\*\shppict{\pict\pngblip\picw320\pich192\picwgoal0\pichgoal0 
    89504e470d0a1a0a0000000d4948445200000140000000c00802000000fa352d9100000e2949444[.....]6c4f0000000049454e44ae426082
}}

问题: 1)这真的是base64吗?

2)如何使用以下代码对其进行解码。?

import base64

imgData = b"base64code00from007aove007string00bcox007idont007know007where007it007starts007and007ends"

with open("imageToSave.png", "wb") as fh:
    fh.write(base64.decodestring(imgData))

完整的rtf文本(保存为.rtf时显示图像)位于:

http://hastebin.com/axabazaroc.tex

1 个答案:

答案 0 :(得分:5)

不,那不是Base64编码的数据。它是十六进制。来自Wikipedia article on the RTF format

  

RTF支持包含JPEG,便携式网络图形(PNG),增强型图元文件(EMF),Windows图元文件(WMF),Apple PICT,Windows设备相关位图,Windows设备无关位图和十六进制OS / 2图元文件图片类型(默认)或RTF文件中的二进制格式。

binascii.unhexlify() function将为您解码回二进制图像数据;你有一个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'

但当然\pngblip条目是一个线索。我不会在这里包含图像,它是一个相当沉闷的8位320x192黑色矩形。