2010-12-15 55 views
1

J'ai une matrice 2D que je veux écrire en tant que fichier PBM (c'est seulement -1,1 valeurs, noir & blanc).écrire la matrice à l'image par PIL

Je viens de découvrir à propos de PIL, mais l'approche suivante ne fonctionne pas:

im = Image.new('L', (self.nx,self.ny)) 
data=[[255*(self.spins[i][j][0].m+1)/2 for j in range(0,self.ny)]for i in range(0,self.nx)] 
im.putdata(data) 
im.save('my_image.pbm') 

qui est, je reçois mon fichier PBM avec son en-tête, mais aucune donnée:

P5 
4 3 
255 

si quelqu'un peut m'aider ici ...

merci!

alessandro

Répondre

3

Image.putdata prend une séquence unidimensionnelle, pas une séquence multidimensionnelle comme ce que vous avez dans votre code.

I.e. au lieu d'utiliser quelque chose comme

[[v1, v2, v3], 
[v4, v5, v6], 
[v7, v8, v9]] 

pour stocker vos données de pixel qui est passé à PutData, il devrait être

[v1, v2, v3, v4, v5, v6, v7, v8, v9] 
+0

merci! Vous l'avez résolu parfaitement ... – alessandro

+0

BTW, résolu par ceci: data = [255 * (self.spins [i] [j] [0] .m + 1)/2 pour j dans la gamme (0, self.ny) pour i dans la gamme (0, self.nx)] Je souhaiterais cependant que PIL produise un code d'erreur dans des cas comme celui-ci ... où puis-je trouver une bonne introduction? – alessandro

+0

La documentation en ligne pour PIL (http://www.pythonware.com/library/pil/handbook/index.htm) est excellente. –