web-dev-qa-db-ja.com

base64イメージをデコードしてファイルに保存する

Webページからハードドライブ上の実際のGIFおよびJPEGファイルにいくつかのbase64画像を保存する必要があります。私を助けることができるユーティリティはそこにありますか?周りを見回しましたが、表示されていないか、適切に使用する方法がわかりません。

言い換えれば、私はページのこのリンクに埋め込まれた画像を撮ろうとしています:

<img src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="info" id="ext-gen1128">

..そしてそれを私の箱のファイルに保存します。ご協力いただきありがとうございます。

5
larryq

データのURLを一時ファイルに保存するには、Python 3.4:でurlretrieve()を使用できます。

#!/usr/bin/env python3
from mimetypes import guess_extension
from urllib.request import urlretrieve

# example image from http://tools.ietf.org/html/rfc2397
url = """data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
   AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
   ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
   a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
   ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
   F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
   hhx4dbgYKAAA7"""
filename, m = urlretrieve(url)
print(filename, guess_extension(m.get_content_type()))
5
jfs

これは、画像URIの逆(imgからbase64)に使用するために作成しました。私はあなたがあなたが必要とするもののためにこれを逆にすることができると確信しています。

#!/usr/bin/env python
import sys
import os
import base64

if(__name__ == '__main__'):
    arglen = len(sys.argv)
    if arglen > 1:
        imgfile = open(sys.argv[1], 'rb').read()
        b64img = base64.b64encode(imgfile)
        file_name = os.path.splitext(sys.argv[1])
        fname = file_name[0]
        fext = file_name[1]

        b64imgfile = open(fname + fext + '.txt', 'w')
        for line in b64img:
            b64imgfile.write(line)
        print fname
        print fext
        print('done')
    else:
        print('No img file specified!')

更新

*上記を逆にするコードがいくつかあります。唯一の注意点は、それがpng、jpgなどであるかどうかを知る必要があるということです。これは、「imgsrc =」から取得するHTMLページ内の画像のデータURIに含まれている必要があります。 data:image/png; base64 ... "。 (以下のpngを想定しています)*

#!/usr/bin/env python
import sys
import os
import base64

if(__name__ == '__main__'):
    arglen = len(sys.argv)
    if arglen > 1:
        b64file = open(sys.argv[1], 'rb').read()
        imgData = base64.b64decode(b64file)
        file_name = os.path.splitext(sys.argv[1])
        fname = file_name[0]
        fext = '.png'

        imgFile = open(fname + fext, 'wb')
        imgFile.write(imgData)
        print('done')
    else:
        print('No file specified!')
4
Justin

あなたが指しているページにChromeで行きました。画像を右クリックして、要素を検査します... Base64でエンコードされたGif画像の<img>タグに移動しますが、これは実際には単純な1x1プレースホルダーです。
これで、インスペクターの[リソース]タブ([要素]の横)に移動すると、Base64でエンコードされたPNGで目的の画像を確認できます。
左側のdata:imageをクリックすると、プレビューを含むリソースの詳細が表示されます。プレビューを右クリックして画像を保存できます...

アドバイスされているように、これらの画像の著作権の問題に注意してください...

注:別の方法を試しました。リソースのURLをコピーして、<img src="<base64-encoded data>">タグを付けた単純なHTMLファイルに貼り付けることができます。良いブラウザでHTMLファイルを表示し、画像を右クリックして保存できます。

2
PhiLho

Total Commanderを使用する場合、データを.b64または.uue拡張子の付いたファイルに保存すると、base64/UUEがデコードされます。 WinzipとWinRarもそれを行います。

2
ccpizza

Base64のデコードに役立つツールはたくさんあります。そのようなものをダウンロードするのに最適な方法は、その方法に大きく依存します。

Webトラフィックの多くはbase64でエンコードされていません...主な理由は、効率が低く、安全性がまったくないためです。 (base64は暗号化ではありません...データを隠して人間が読めないようにするだけです)生のストリームデータをテキストファイルなどに取得できる場合は、再構築する方法がいくつかあります。さらに、データにはファイルに関する情報は含まれません...つまり、ファイル名、サイズ、タイプなど...データのストリームになります...そしてそれが何であるかを決定するのはあなた次第です。

データがどこから来ているのかを覗くことができるチャンスはありますか? ...それはあなたにもっと適切な答えを与えるのに本当に役立ちます。

1
TheCompWiz

WebブラウザからWebページを保存すると、画像も保存されます。 IE Webページとして保存を選択して完了します。画像はサブフォルダーにあり、jpgまたはpng形式になります。ブラウザーはHTTPデータ転送に使用されるすべてのエンコードを処理します。

1
RedGrittyBrick

あなたが完全に私に答えをくれたので、それは面白いです、私が意味することを共有させてください。 'data:image/gif; base64 "の後に、クレイジーなbase64文字列が続きます。画像をJPEGに変換し直したかったのですが、方法もわかりませんでした。スクリプトを使用せずにすばやく実行したかっただけです。 、pythonなど(多くの場合、これは良い方法ですが)変換する必要のある画像が1つだけありました。

タグ「imgsrc =」を表示するとすぐに、ブラウザがすでにbase64コードを理解していることがわかりました。テキストドキュメントを開き、タグ<img src="data:image/gif;base64,...">を追加して* .html拡張子として保存し、ブラウザで開いて(いずれも機能します)、画像を右クリックして保存しました。 Voila insta-base64からの画像。

ありがとう!

0
jacktrader