2012-04-12 25 views
9

PIL Image nesnesinden nasıl seçilebilir bir dosya oluşturabilirim, böylece bu görüntüleri tek bir turşu dosyası olarak kaydedebilir ve PIL çalıştıran bir sunucu gibi başka bir bilgisayara yükleyebilir ve oradan çıkartabilirsiniz?Pickleable Image Object

Verilerin içine Görüntü nesneye dönüştürebilirsiniz

cevap

16

o zaman turşu olabilir: Görüntüye

image = { 
    'pixels': im.tostring(), 
    'size': im.size, 
    'mode': im.mode, 
} 

Ve geri:

im = Image.fromstring(image['mode'], image['size'], image['pixels']) 

NOT: bahsedildiğiastex olarak, eğer Yastık kullanarak (PIL yerine önerilen), yöntemi tobytes() için kullanımdan kaldırılmıştır. Benzer şekilde frombytes() için fromstring() ile.

+1

'Image.tostring() 'şimdi kullanımdan kaldırıldı n 'Yastık 'Image.tobytes()' lehine. Gelecek kuşak için, yukarıdakileri değiştirmek (veya en azından bir not bırakmak) daha iyi olabilir. – astex

9

kullanarak Gerald'ın cevabın hafif varyasyon anahtar kelime bağımsız değişken

oluşturmak pickleable nesne

image = {'data': im.tostring(), 'size':im.size, 'mode':im.mode} 

veya arka görüntüye

image = dict(data=im.tostring(), size=im.size, mode=im.mode) 

unpickle

im = Image.fromstring(**image) 
+0

Bu, görüntüleri uygulamamda saklamama gerek olmadığı anlamına mı geliyor? Görüntüyü kullanmak istediğimde, serileştirdikleri dizgeyi kullanabilirim ve sadece uygulama içinde sabitleyebilir miyim? – Ogen

+0

Teknik olarak * bunu yapabilir, ancak gerçek bir dosya olarak saklamak çok daha iyidir ... her iki durumda da kodunuzla birlikte versiyonlanabilir, ancak resimler olarak saklanan resimlerin, bunları kolayca görüntüleyebileceğiniz ve ne olduğunu bildiğiniz anlamına gelir. kaydettiğiniz medya. Resimleri kod olarak saklıyorsanız, kaynak dosyalarınızın boyutunu yapay olarak şişiriyorsunuz. Bu sayede, görüntülemek ve aramaya daha fazla zahmetli oluyorsunuz ve bu görüntüyü görüntülemek ve/veya değiştirmek istediğinizde medyayı yönetmek daha zor hale geliyor. – kungphu