2016-08-24 75 views
0

的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

+0

@ thesonyman101:這不是Base64圖像數據。 –

+0

哦,那是不是。請問 – thesonyman101

回答

5

不,這不是Base64編碼的數據。它是十六進制。從Wikipedia article on the RTF format

RTF支持包括JPEG的,可移植網絡圖形(PNG),增強型圖元文件(EMF),Windows圖元文件(WMF),蘋果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\[email protected]' 
>>> from imghdr import test_png 
>>> test_png(r, None) 
'png' 

但當然\pngblip進入了一個線索那裏。我不會在這裏包含圖像,它是一個相當沉悶的8位320x192黑色矩形。

+0

我之前在ms-word論壇上問過同樣的問題,沒有人能夠回答。 – Rahul