2010-01-29 4 views
1

Je veux lire une image en mode binaire pour que je puisse l'enregistrer dans ma base de données, comme ceci:Pourquoi Python sous Windows ne peut pas lire une image en mode binaire?

img = open("Last_Dawn.jpg") 
t = img.read() 
save_to_db(t) 

Cela fonctionne sur Mac. Mais sous Windows, img.read() est incorrect. C'est juste un peu hors de l'ensemble.

Donc ma première question est: pourquoi le code ci-dessus ne fonctionne pas dans Windows?

Ensuite, y a-t-il un autre moyen de le faire?

Merci beaucoup!

Répondre

2

Je ne peux pas dire avec certitude, mais je sais que la norme ISO C ne distingue pas ish entre les modes binaire et non-binaire lors de l'appel fopen et pourtant Windows fait.

Il est probable que le code Python utilise simplement fopen("Last_Dawn.jpg","r") sous les couvertures (puisqu'il est écrit en C) et cela est ouvert dans Windows en mode non-binaire.

Cela va probablement convertir les caractères de fin de ligne (LF -> CRLF) et éventuellement d'autres.

Si vous vous préciser le mode « rb » sur votre déclaration ouverte, qui devrait fixer:

img = open("Last_Dawn.jpg", "rb") 
6

Vous devez ouvrir en mode binaire:

img = open("Last_Dawn.jpg", 'rb') 
2
open(filename, 'rb')