Декодирование изображений base64 и сохранение в файл

28886
larryq

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

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

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

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

4

7 ответов на вопрос

4
Justin

Я написал это, чтобы пойти другим путем (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!') 
2
ccpizza

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

2
PhiLho

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

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

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

2
jfs

Чтобы сохранить 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 7 лет назад 0
1
RedGrittyBrick

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

I've tried that, and it's a great idea. But the "images" are defined in a css file as base64 strings, and saving the page saves the css file, not the actual images. (See the URL I pasted in the comment below to follow what I'm dealing with and what I'm trying to save.) I may wind up doing a screen capture and saving them that way, but it'd be nice not to. larryq 13 лет назад 0
Похоже, что сайт идет на все, чтобы отговорить людей от копирования изображений. Я бы посмотрел в другом месте, где владелец авторских прав сделал подобные изображения доступными по лицензии Creative Commons. RedGrittyBrick 13 лет назад 0
1
TheCompWiz

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

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

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

Sure, the page I'm looking at is at http://dev.sencha.com/deploy/touch/examples/kitchensink/ (Chrome browser only I'm afraid, doesn't work in IE or FireFox) If you go to the examples on the left, look for "User Interface", then "Bottom Tabs" The icons at the bottom of the page are in base64 format, embedded in tags. I'd love to get at them and save them to gif files. larryq 13 лет назад 0
0
jacktrader

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

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

Спасибо!!

Похожие вопросы