2016-08-24 15 views
0

からbase64で画像をデコードし、私は文字列から画像を抽出したい:私のRTF文書でRTF

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

質問: 文字列は、このようなものです 1)これは本当にbase64でいるのですか?

2)以下のコードを使用してデコードする方法。 (.RTF画像を示しているとして保存)

import base64 

imgData = b"base64code00from007aove007string00bcox007idont007know007where007it007starts007and007ends" 

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

フルRTFテキストがでている:

http://hastebin.com/axabazaroc.tex

+0

@ thesonyman101:これはBase64画像データではありません。 –

+0

ああ、そうじゃない。すみませんが – thesonyman101

答えて

5

いいえ、それはBase64でエンコードされたデータではありません。 16進数です。 Wikipedia article on the RTF formatから:

RTF、ポータブルネットワークグラフィックス(PNG)、拡張メタファイル(EMF)、Windowsメタファイル(WMF)、アップルPICT、Windowsデバイス依存ビットマップ、Windowsのデバイス独立ビットマップやOS JPEGを含めることをサポートしています/ 2 RTFファイルの16進数(デフォルト)またはバイナリ形式のメタファイル形式。

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