Question Décodage d'images de base64 et enregistrement dans un fichier


Je dois enregistrer quelques images de base64 à partir d’une page Web sur les fichiers GIF et JPEG de mon disque dur. Y a-t-il un utilitaire qui peut m'aider? J'ai regardé autour de moi et soit je ne vois pas un ou je ne sais pas comment en utiliser un correctement.

En d'autres termes, je cherche à prendre l'image intégrée dans ce lien sur une page:

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

..et le sauvegarder dans un fichier sur ma boite. Merci de votre aide.


4
2018-03-28 18:27


origine




Réponses:


J'ai écrit ceci pour aller dans l'autre sens (img à base64) pour les URI d'images. Je suis sûr que vous pourriez inverser cela pour ce dont vous avez besoin.

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

Mettre à jour

* Voici un code qui inversera ce qui précède. La seule mise en garde est que vous devez savoir s'il s'agissait de png, jpg, etc. Cela devrait être dans l'URI de données des images dans la page HTML à partir de laquelle vous les tirez "img src = 'data: image /png; base64 ...". (Je suppose que png ci-dessous) *

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





Si vous utilisez Total Commander, il décodera base64 / UUE à condition de sauvegarder les données dans un fichier avec une extension .b64 ou .uue. Winzip et WinRar le feront aussi.


2
2018-03-28 19:02





Je suis allé à la page que vous pointez, avec Chrome. Faites un clic droit sur une image, inspectez un élément ... Nous allons à un <img> tag avec une image Gif encodée en Base64, mais c'est en fait un simple espace réservé 1x1.
Nous pouvons donc aller à l'onglet Ressources de l'inspecteur (à côté de l'élément One), et nous pouvons voir les images d'intérêt, en format PNG codé en Base64.
Cliquez sur les données: image à gauche, vous obtenez des détails sur la ressource, y compris un aperçu. Vous pouvez cliquer avec le bouton droit sur l'aperçu et enregistrer l'image ...

Comme conseillé, méfiez-vous des problèmes de copyright avec ces images ...

Note: J'ai essayé une autre manière: vous pouvez copier l'URL des ressources et les coller dans un simple fichier HTML avec <img src="<base64-encoded data>"> Mots clés. Affichez le fichier HTML dans un bon navigateur et vous pouvez enregistrer les images en cliquant dessus avec le bouton droit de la souris.


2
2018-04-29 12:53





Lorsque vous enregistrez une page Web à partir d'un navigateur Web, elle doit également enregistrer les images. Dans Internet Explorer, choisissez Enregistrer comme page Web, puis complétez. Les images seront dans un sous-dossier et seront au format jpg ou png - le navigateur gère tout codage utilisé pour le transfert de données HTTP.


1
2018-03-28 19:00



J'ai essayé cela et c'est une excellente idée. Mais les "images" sont définies dans un fichier css sous forme de chaînes de base64 et l'enregistrement de la page enregistre le fichier css, pas les images réelles. (Voir l'URL que j'ai collée dans le commentaire ci-dessous pour suivre ce que je traite et ce que j'essaie de sauver.) Je vais peut-être faire une capture d'écran et l'enregistrer de cette façon, mais ce serait bien de ne pas . - larryq
Il semble que le site fasse des efforts pour dissuader les gens de copier les images. Je chercherais ailleurs où le titulaire du droit d'auteur a créé des images similaires sous une licence Creative Commons. - RedGrittyBrick


De nombreux outils peuvent vous aider à décoder la base64. Le meilleur moyen de télécharger quelque chose comme cela dépend en grande partie de la façon dont vous y parvenez.

Peu de trafic Web est encodé en base64 ... en grande partie parce qu'il n'est pas très efficace et qu'il n'est pas du tout sécurisé. (base64 n'est pas un cryptage… il masque simplement les données pour le rendre non lisible) Si vous pouvez obtenir les données de flux brutes dans un fichier texte ou autre ... il existe plusieurs manières de le réassembler. De plus, les données ne contiendront pas d’informations sur le fichier, c’est-à-dire le nom du fichier, sa taille, son type, etc. Ce sera un flux de données, et c’est à vous de déterminer ce qu’il est.

Avez-vous une chance de voir d'où proviennent les données? ... cela aiderait vraiment à vous donner une réponse plus appropriée.


1
2018-03-28 20:06



Bien sûr, la page que je regarde est à dev.sencha.com/deploy/touch/examples/kitchensink (Le navigateur Chrome seulement je crains, ne fonctionne pas dans IE ou FireFox) Si vous allez aux exemples sur la gauche, recherchez "Interface utilisateur", puis "Onglets inférieurs" Les icônes en bas de la page sont dans format base64, intégré dans les balises <img>. J'adorerais y accéder et les enregistrer dans des fichiers gif. - larryq


Pour enregistrer l’URL de données dans un fichier temporaire, vous pouvez utiliser urlretrieve() dans 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



Hou la la! Cela mérite plus de votes - Cesar Canassa


C'est drôle parce que tu m'as donné la réponse, laisse-moi partager ce que je veux dire. J'ai eu les "données: image / gif; base64", suivies d'une folle chaîne de base 64. Je voulais reconvertir l'image en JPEG mais je ne savais pas non plus et je voulais juste le faire rapidement sans utiliser de script , python, etc. (bien que ce soit une bonne façon de procéder dans de nombreux cas), je n'avais qu'une image à convertir pour le moment.

Dès que vous m'avez montré le tag "img src =", j'ai immédiatement compris que le navigateur comprend déjà le code base64. Je viens d'ouvrir un document texte, ajouté le tag <img src="data:image/gif;base64,..."> enregistré comme une extension * .html et ouvert dans le navigateur (n'importe lequel d'entre eux fonctionnent), un clic droit sur l'image et enregistré. Voila insta-image de base64.

Merci!!


0
2018-04-24 17:17