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


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

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

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

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


4
2018-03-28 18:27


Источник




Ответы:


Я написал это, чтобы пойти другим путем (img to 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 = 'данные: изображение /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> тегом с изображением Gif с кодировкой Base64, но на самом деле это простой заполнитель 1x1.
Таким образом, мы можем перейти на вкладку «Ресурсы» инспектора (рядом с Элементами), и мы можем увидеть изображения, представляющие интерес, в PNG с кодировкой Base64.
Нажмите на данные: изображение слева, вы получите подробную информацию о ресурсе, включая предварительный просмотр. Вы можете щелкнуть правой кнопкой мыши предварительный просмотр и сохранить изображение ...

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

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


2
2018-04-29 12:53





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


1
2018-03-28 19:00



Я пробовал это, и это отличная идея. Но «изображения» определены в файле css как строки base64, и сохранение страницы сохраняет файл css, а не фактические изображения. (См. URL-адрес, который я вставил в комментарии ниже, чтобы следить за тем, что я имею в виду, и тем, что я пытаюсь сохранить.) Я могу завершить снятие экрана и сохранить их таким образом, но было бы неплохо не , - larryq
Похоже, что сайт идет по нескольким причинам, чтобы отговорить людей от копирования изображений. Я бы посмотрел в другом месте, где владелец авторских прав сделал похожие изображения доступными по лицензии Creative Commons. - RedGrittyBrick


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

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

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


1
2018-03-28 20:06



Конечно, страница, на которую я смотрю, есть dev.sencha.com/deploy/touch/examples/kitchensink (Только в браузере Chrome, я боюсь, не работает в IE или FireFox). Если вы перейдете к примерам слева, найдите «Пользовательский интерфейс», затем «Нижние вкладки» Значки внизу страницы находятся в base64, встроенный в теги <img>. Я хотел бы получить их и сохранить их в gif-файлах. - larryq


Чтобы сохранить 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()))

1
2018-01-10 03:27



Вау! Это заслуживает большего внимания - Cesar Canassa


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

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

Благодаря!!


0
2018-04-24 17:17