Decodificando imagens base64 e salvando em um arquivo

4

Eu preciso salvar algumas imagens de base64 de uma página da web em arquivos GIF e JPEG reais no meu disco rígido. Existe um utilitário que possa me ajudar? Eu olhei em volta e ou não estou vendo um ou não descobri como usá-lo corretamente.

Em outras palavras, estou procurando levar a imagem incorporada neste link em uma página:

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

.. e salve-o em um arquivo na minha caixa. Obrigado pela sua ajuda.

    
por larryq 28.03.2011 / 20:27

7 respostas

4

Eu escrevi isso para ir para o outro lado (img para base64) para URIs de imagem. Tenho certeza que você poderia reverter isso para o que você precisa.

#!/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!')

Atualizar

* Aqui está algum código que irá reverter o acima. A única ressalva é que você precisa saber se foi png, jpg, etc. Isso deve estar nas URIs de dados das imagens dentro da página HTML, puxando-as de " img src=" data: image / png ; base64 ... ". (Estou assumindo png abaixo) *

#!/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!')
    
por 29.03.2011 / 00:56
3

Para salvar o URL dos dados em um arquivo temporário, você pode usar urlretrieve() no 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()))
    
por 10.01.2014 / 04:27
2

Se você usar o Total Commander, ele decodificará base64 / UUE desde que você salve os dados em um arquivo com extensão .b64 ou .uue. O Winzip e o WinRar também farão isso.

    
por 28.03.2011 / 21:02
2

Eu fui para a página que você aponta, com o Chrome. Clique com o botão direito em uma imagem, inspecionar um elemento ... Vamos para uma tag <img> com uma imagem Gif codificada em Base64, mas isso é na verdade um simples espaço reservado para 1x1.
Assim, podemos ir para a guia Recursos do Inspetor (ao lado do Elements one), e podemos ver as imagens de interesse, em PNG codificado em Base64.
Clique nos dados: imagem à esquerda, você obtém detalhes sobre o recurso, incluindo uma visualização. Você pode clicar com o botão direito do mouse na visualização e salvar a imagem ...

Como recomendado, tenha cuidado com questões de direitos autorais com essas imagens ...

Observação: tentei de outra forma: você pode copiar o URL dos recursos e colá-los em um arquivo HTML simples com <img src="<base64-encoded data>"> tags. Visualize o arquivo HTML em um bom navegador e salve as imagens clicando com o botão direito do mouse sobre elas.

    
por 29.04.2011 / 14:53
1

Quando você salva uma página da Web de um navegador da Web, ela também deve salvar as imagens. No IE, você escolhe salvar como página da Web, completa. As imagens estarão em uma subpasta e estarão no formato jpg ou png - o navegador lida com qualquer codificação usada para a transferência de dados HTTP.

    
por 28.03.2011 / 21:00
1

Existem várias ferramentas que podem ajudá-lo a decodificar o base64. A melhor forma de fazer o download de algo assim depende muito de como você está conseguindo isso.

Não muito do tráfego da web é codificado em base64 ... em grande parte porque não é muito eficiente e não é nada seguro. (base64 não é criptografia ... apenas obscurece os dados para torná-los não legíveis para humanos) Se você puder obter os dados brutos do fluxo em um arquivo de texto ou algo assim ... há várias maneiras de montá-los novamente. Além disso, os dados não conterão informações sobre o arquivo ... ou seja, nome do arquivo, tamanho, tipo, etc ... será um fluxo de dados ... e cabe a você determinar o que é. / p>

Alguma chance de vermos de onde os dados estão vindo? ... isso realmente ajudaria a dar uma resposta mais apropriada.

    
por 28.03.2011 / 22:06
0

É engraçado porque você me deu a resposta, deixe-me compartilhar o que quero dizer. Eu tinha o 'data: image / gif; base64', seguido por algumas strings básicas de 64. Eu queria converter a imagem de volta para JPEG, mas eu não sabia como e realmente queria fazê-lo rapidamente sem usar um script , python, etc (embora seja uma boa maneira de ir em muitos casos). Eu só tinha uma imagem que precisava converter agora.

Assim que você me mostrou a tag "img src=", eu imediatamente entendi que o navegador já entende o código base64. Acabei de abrir um documento de texto, adicionei a tag <img src="data:image/gif;base64,..."> salvou como extensão * .html e abri no navegador (qualquer um deles funciona), cliquei com o botão direito na imagem e salvei. Voila insta-image from base64.

Obrigado !!

    
por 24.04.2018 / 19:17