4

Мне нужно сохранить несколько изображений base64 с веб-страницы в настоящие файлы GIF и JPEG на моем жестком диске. Есть ли какая-нибудь утилита, которая может мне помочь? Я огляделся вокруг или не вижу ни одного, или не понял, как правильно его использовать.

Другими словами, я хочу взять изображение, встроенное в эту ссылку на странице:

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

... и сохранить его в файл на моем ящике. Спасибо за вашу помощь.

7 ответов7

4

Я написал это, чтобы пойти другим путем (img к base64) для URI изображений. Я уверен, что вы можете изменить это для того, что вам нужно.

#!/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 и т.д. Это должно быть в URI данных изображений на странице HTML, когда вы извлекаете их из " 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()))
2

Я пошел на страницу, на которую вы указываете, с Chrome. Щелкните правой кнопкой мыши на изображении, осмотрите элемент ... Мы переходим к тегу <img> с изображением Gif в кодировке Base64, но на самом деле это простой заполнитель 1x1.
Таким образом, мы можем перейти на вкладку «Ресурсы» Инспектора (рядом с «Элементом») и увидеть интересующие изображения в формате PNG в кодировке Base64.
Нажмите на данные: изображение слева, вы получите подробную информацию о ресурсе, включая предварительный просмотр. Вы можете щелкнуть правой кнопкой мыши на предварительном просмотре и сохранить изображение ...

В соответствии с рекомендациями, остерегайтесь вопросов авторского права на эти изображения ...

Примечание. Я попробовал другой способ: вы можете скопировать URL-адрес ресурсов и вставить их в простой файл HTML с тегами <img src="<base64-encoded data>"> . Просмотрите HTML-файл в хорошем браузере, и вы можете сохранить изображения, щелкнув по ним правой кнопкой мыши.

2

Если вы используете Total Commander, он будет декодировать base64/UUE при условии сохранения данных в файл с расширением .b64 или .uue. Winzip и WinRar тоже это сделают.

1

Существует целый ряд инструментов, которые могут помочь вам декодировать base64. Как лучше всего скачать что-то подобное, во многом зависит от того, как вы к этому доберетесь.

Не так много веб-трафика кодируется в base64 ... в основном потому, что он не очень эффективен и совсем не защищен. (base64 - это не шифрование ... он просто затемняет данные, чтобы сделать их нечитаемыми для человека) Если вы можете получить необработанные данные потока в текстовый файл или что-то подобное ... есть несколько способов собрать его. Кроме того, данные не будут содержать информацию о файле ... то есть имя файла, размер, тип и т.д. ... это будет поток данных ... и вам решать, что это такое.

Есть ли шанс, что мы можем посмотреть, откуда поступают данные? ... это действительно поможет дать вам более подходящий ответ.

1

Когда вы сохраняете веб-страницу из веб-браузера, она также должна сохранять изображения. В IE вы выбираете сохранить как веб-страницу, завершить. Изображения будут находиться в подпапках и в формате jpg или png - браузер обрабатывает любую кодировку, используемую для передачи данных HTTP.

0

Забавно, потому что вы полностью дали мне ответ, позвольте мне поделиться тем, что я имею в виду. У меня было «data:image/gif; base64», за которым следовала какая-то безумная строка base64. Я хотел преобразовать изображение обратно в JPEG, но я не знал, как это сделать, и я просто хотел сделать это быстро, без использования скрипта, python и т.д. (Хотя во многих случаях это хороший способ). У меня было только одно изображение, которое мне нужно было конвертировать прямо сейчас.

Как только вы показали мне тег «img src =», я сразу понял, что браузер уже понимает код base64. Я просто открываю текстовый документ, добавляю тег <img src="data:image/gif;base64,..."> сохраняю его как расширение * .html и открываю в браузере (любой из них работает), щелкните правой кнопкой мыши на изображение и сохраните. Вуаля insta-изображение из base64.

Спасибо!!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .