題 解碼base64圖像並保存到文件


我需要將網頁中的一些base64圖像保存到硬盤上的實際GIF和JPEG文件中。有沒有可以幫助我的實用工具?我環顧四周,或者我沒有看到一個或者沒有弄清楚如何正確使用它。

換句話說,我希望將頁面中嵌入的圖像嵌入頁面:

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

..並將其保存到我的盒子上的文件中。謝謝你的幫助。


4
2018-03-28 18:27


起源




答案:


我寫這個是為了圖像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等。這應該在HTML頁面中的圖像的數據URI中,從中拉出它們“img src ='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
2018-03-28 22:56





如果您使用Total Commander,它將解碼base64 / UUE,前提是您將數據保存到擴展名為.b64或.uue的文件中。 Winzip和WinRar也會這樣做。


2
2018-03-28 19:02





我使用Chrome訪問了您指向的頁面。右鍵單擊圖像,檢查元素...... 我們去了 <img> 使用Base64編碼的Gif圖像標記,但這實際上是一個簡單的1x1佔位符。
因此,我們可以轉到Inspector的Resources選項卡(在Elements one旁邊),我們可以在Base64編碼的PNG中看到感興趣的圖像。
單擊左側的數據:圖像,您將獲得有關資源的詳細信息,包括預覽。您可以右鍵單擊預覽並保存圖像...

建議,請注意這些圖片的版權問題......

注意:我嘗試了另一種方法:您可以復制資源的URL,並將其粘貼到一個簡單的HTML文件中 <img src="<base64-encoded data>"> 標籤。在一個好的瀏覽器中查看HTML文件,您可以通過右鍵單擊來保存圖像。


2
2018-04-29 12:53





要將數據URL保存到臨時文件,您可以使用 urlretrieve() 在Python 3.4中:

#!/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()))

2
2018-01-10 03:27



哇!這值得更多的讚成 - Cesar Canassa


當您從Web瀏覽器保存網頁時,它也應該保存圖像。在IE中,您選擇另存為網頁,完成。圖像將位於子文件夾中,並將採用jpg或png格式 - 瀏覽器處理用於HTTP數據傳輸的任何編碼。


1
2018-03-28 19:00



我試過了,這是一個好主意。但是“圖像”在css文件中定義為base64字符串,保存頁面會保存css文件,而不是實際圖像。 (請參閱我在下面的評論中粘貼的網址,以了解我正在處理的內容以及我正在嘗試保存的內容。)我可能最終會進行屏幕捕獲並以這種方式保存它們,但不是很好。 - larryq
看起來該網站竭盡全力阻止人們複製圖像。我會在其他地方尋找版權所有者根據創意公共許可證製作類似圖像的位置。 - RedGrittyBrick


有很多工具可以幫助您解碼base64。如何最好地下載這樣的東西在很大程度上取決於你如何達到它。

沒有太多的網絡流量是base64編碼的...主要是因為它不是非常有效,而且它根本不安全。 (base64不是加密......它只是模糊了數據,使其不具備人類可讀性)如果你可以將原始流數據提供給文本文件或其他類似的......有幾種方法可以重新組裝它。此外,數據不會包含有關文件的信息...即文件名,大小,類型等...它是一個數據流......並且由您決定它是什麼。

我們有機會窺探數據的來源嗎? ......真的有助於給你一個更恰當的答案。


1
2018-03-28 20:06



當然,我正在看的頁面是 dev.sencha.com/deploy/touch/examples/kitchensink (我只擔心Chrome瀏覽器,在IE或FireFox中無效)如果您轉到左側的示例,請查找“用戶界面”,然後選擇“底部選項卡”頁面底部的圖標位於base64格式,嵌入在<img>標籤中。我很想得到它們並將它們保存到gif文件中。 - larryq


這很有趣,因為你完全給了我答案,讓我分享我的意思。我有'data:image / gif; base64',然後是一些瘋狂的base64字符串。我想將圖像轉換回JPEG但我不知道如何,我真的只是想在不使用腳本的情況下快速完成,python等(雖然這在許多情況下是一個很好的方法)。我只需要一個我需要立即轉換的圖像。

一旦你向我展示了標籤“img src =”,我立即明白瀏覽器已經理解了base64代碼。我只是打開一個文本文檔,添加了標籤 <img src="data:image/gif;base64,..."> 將其保存為* .html擴展名並在瀏覽器中打開(其中任何一個都可以工作),右鍵單擊圖像並保存。來自base64的Voila insta-image。

謝謝!!


0
2018-04-24 17:17