更新

更新

我需要将网页上的几张 base64 图像保存为硬盘上的实际 GIF 和 JPEG 文件。有没有可以帮助我的实用程序?我找遍了所有地方,要么是没找到,要么是还没搞清楚如何正确使用。

换句话说,我希望获取页面上此链接中嵌入的图像:

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

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

答案1

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

我写这个是为了将图片 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='数据:图片/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

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

答案4

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

相关内容