解码base64图像并保存到文件


4

我需要将网页中的一些base64图像保存到硬盘上的实际GIF和JPEG文件中。有没有可以帮助我的实用工具?我环顾四周,要么我没有看到一个或者没有弄清楚如何正确使用它。

换句话说,我正在寻找在页面上嵌入此链接的图像:

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

..并将其保存到我的盒子上的文件中。谢谢你的帮助。

Answers:


4

我写这个是为了图像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!')

3

要将数据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()))

哇!这值得更多的赞成
Cesar Canassa

正确的。如此甜蜜的解决方案。
Bhumi Singhal

2

如果使用Total Commander,它将解码base64 / UUE,前提是您将数据保存到扩展名为.b64或.uue的文件中。 Winzip和WinRar也会这样做。


2

我使用Chrome访问了您指向的页面。右键单击图像,检查元素...... 我们去了 <img> 使用Base64编码的Gif图像标记,但这实际上是一个简单的1x1占位符。
因此,我们可以转到Inspector的Resources选项卡(在Elements one旁边),我们可以在Base64编码的PNG中看到感兴趣的图像。
单击左侧的数据:图像,您将获得有关资源的详细信息,包括预览。您可以右键单击预览并保存图像...

建议,请注意这些图片的版权问题......

注意:我尝试了另一种方法:您可以复制资源的URL,并将其粘贴到一个简单的HTML文件中 <img src="<base64-encoded data>"> 标签。在一个好的浏览器中查看HTML文件,您可以通过右键单击来保存图像。


1

当您从Web浏览器保存网页时,它也应该保存图像。在IE中,您选择另存为网页,完成。图像将位于子文件夹中,并将采用jpg或png格式 - 浏览器处理用于HTTP数据传输的任何编码。


我试过了,这是一个好主意。但是“图像”在css文件中定义为base64字符串,保存页面会保存css文件,而不是实际图像。 (请参阅我在下面的评论中粘贴的网址,以了解我正在处理的内容以及我正在尝试保存的内容。)我可能最终会进行屏幕捕获并以这种方式保存它们,但它不是很好。
larryq

看起来该网站竭尽全力阻止人们复制图像。我会在其他地方寻找版权所有者根据创意公共许可证制作类似图像的位置。
RedGrittyBrick

1

有很多工具可以帮助您解码base64。如何最好地下载这样的东西在很大程度上取决于你如何达到它。

没有太多的网络流量是base64编码的...主要是因为它不是非常有效,而且它根本不安全。 (base64不是加密......它只是模糊了数据,使其不具有人类可读性)如果你可以将原始流数据提供给文本文件或其他类似的......有几种方法可以重新组装它。此外,数据不会包含有关文件的信息...即文件名,大小,类型等...它是一个数据流......并且由您决定它是什么。

我们有机会窥探数据的来源吗? ......真的有助于给你一个更恰当的答案。


当然,我正在看的页面是 dev.sencha.com/deploy/touch/examples/kitchensink (Chrome浏览器只是我害怕,在IE或FireFox中不起作用)如果你转到左边的例子,找到“用户界面”,然后“底部选项卡”页面底部的图标是base64格式,嵌入&lt; img&gt;标签。我很想得到它们并将它们保存到gif文件中。
larryq

0

这很有趣,因为你完全给了我答案,让我分享我的意思。我有'data:image / gif; base64',然后是一些疯狂的base64字符串。我想将图像转换回JPEG但我不知道如何,我真的只是想在不使用脚本的情况下快速完成,python等(虽然这在许多情况下是一个很好的方法)。我只需要一个我需要立即转换的图像。

一旦你向我展示了标签“img src =”,我立即明白浏览器已经理解了base64代码。我只是打开一个文本文档,添加了标签 <img src="data:image/gif;base64,..."> 将其保存为* .html扩展名并在浏览器中打开(其中任何一个都可以工作),右键单击图像并保存。来自base64的Voila insta-image。

谢谢!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.