2011-02-06 4 views
1

J'utilise im.load() pour obtenir les pixels de ORIGINAL_IMAGE. , Je sauve la suite, ilRequête sur im.save en PIL python

Je vois que tout ce qui est enregistré est différent de ce que je voulais sauver -

C'est un extrait de code et de sortie qui mettra en valeur mon problème -

Snippet:

im = Image.open(ORIGINAL_IMAGE) 
dup_im = im.copy() 
pix = dup_im.load() 
dup_im.save(DUP_IMAGE) 
saved_im = Image.open(DUP_IMAGE) 
saved_pix = saved_im.load() 

for i in range(10): 
     print pix[0, i], " : ", saved_pix[0, i] 

sortie de l'impression -

avant enreg: SAUVER

APRÈS
$ python test.py 
162 : 162 
162 : 162 
162 : 163 
162 : 163 
162 : 163 
164 : 162 
160 : 161 
159 : 160 
155 : 153 
155 : 155 
$ 

Détails sur ma version Python -

$ python 
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 

Toute idée pourquoi les deux champs (pixels avant et après l'enregistrement) ne sont pas les mêmes?

Répondre

6

Je peux recréer ceci lors du chargement d'un fichier JPG et l'enregistrer de nouveau au format JPG. Les données de pixel sont égales lors de l'enregistrement en tant que bitmap. Comme JPG est un format d'image avec perte, la sauvegarde provoque un ré-encodage, modifiant ainsi les données de pixel.

+0

Merci :) Utilisation de BMP travaillé – sril

+0

Par curiosité, pourquoi liriez-vous une image et l'enregistreriez-vous ensuite (sans la changer)? –