2009-03-10 19 views
11

Come si codifica un'immagine png in base64 usando python su Windows?base64 png in python su Windows

Quanto sopra funziona bene in Linux e OSX, ma su Windows codificherà i primi caratteri e quindi verrà interrotto. Perchè è questo?

risposta

26

Open the file in binary mode:

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

Io non sono molto familiarità con Windows, ma mi immagino quello che sta succedendo è che il file contiene un carattere (0x1A) che Windows is interpreting as the end of the file (per motivi di eredità) quando viene aperto in modalità testo. L'altro problema è che l'apertura di un file in modalità testo (senza la 'b') su Windows causerà la riscrittura delle terminazioni di riga, che in genere interromperanno i file binari in cui quei caratteri non indicano effettivamente la fine di una riga.

+0

+1 perché funziona. – Brian

+0

è davvero corretto, strano come funziona bene senza di esso in linux/osx – directedition

+0

Linus/OSX trattano i file binari e di testo allo stesso modo, mentre Windows considera il ritorno a capo diverso nei file di testo rispetto ai file binari. Inoltre, dovresti fare clic sulla casella accanto alla sua risposta per contrassegnarla come risposta corretta. – Powerlord

9

Per aumentare la risposta da Miles, il first eight bytes in a PNG file sono appositamente progettati:

  • 89 - il primo byte è un controllo che po 8 non è stata spogliata
  • "PNG" - lasciare che qualcun leggere che si tratta di un formato PNG
  • 0d 0a - alla fine-of-line indicatore di DOS, per verificare se ci fosse DOS> unix conversione
  • 1a - DOS end-of-file char acter, per verificare che il file è stato aperto in modalità binaria
  • 0a - unix carattere di fine linea, a controllo se ci fosse un Unix> DOS conversione

Il codice si ferma al la 1a, come progettato.

Problemi correlati