2009-03-10 3 views
11

Comment encoder une image png en base64 en utilisant python sous Windows? Ce qui précède fonctionne très bien sous Linux et OSX, mais sous Windows, il va encoder les premiers caractères puis couper court. Pourquoi est-ce?base64 png en python sous Windows

Répondre

26

Open the file in binary mode:

open("icon.png", "rb") 

Je ne suis pas très familier avec Windows, mais j'imagine ce qui se passe est que le fichier contient un caractère (0x1A) qui Windows is interpreting as the end of the file (pour des raisons historiques) lorsqu'il est ouvert en mode texte. L'autre problème est que l'ouverture d'un fichier en mode texte (sans le 'b') sous Windows entraînera la réécriture des terminaisons de ligne, ce qui casse généralement les fichiers binaires où ces caractères n'indiquent pas réellement la fin d'une ligne.

+0

+1 parce que cela fonctionne. – Brian

+0

il est en effet correct, bizarre comment ça marche bien sans linux/osx – directedition

+0

Linus/OSX traite les fichiers binaires et texte de la même façon, tandis que Windows traite le retour chariot différemment dans les fichiers texte que dans les fichiers binaires. En outre, vous devez cliquer sur la case à côté de sa réponse pour la marquer comme la bonne réponse. – Powerlord

9

Pour augmenter la réponse de Miles, le first eight bytes in a PNG file sont spécialement conçus:

  • 89 - le premier octet est un chèque qui bit 8 n'a pas été dépouillé
  • "PNG" - laisser quelqu'un lire que c'est un format PNG
  • 0d 0a - l'indicateur DOS bout de ligne , pour vérifier s'il y avait DOS-> conversion unix
  • 1a - DOS en fin de fichier ombles tère, pour vérifier que le fichier a été ouvert en mode binaire
  • 0a - caractère de fin de ligne unix, à vérifier s'il y avait un UNIX> conversion DOS

arrête Votre code à le 1a, tel que conçu.

Questions connexes