2009-08-05 23 views
10
from PIL import Image 

img = Image.open('1.png') 
img.save('2.png') 

ilk görüntü saydam arka planı kaydetmez, ama bunu kaydederken, şeffaflık yanlış yapıyorumPIL şeffaflık

(arka plan beyazdır) gitti?

cevap

30

Muhtemelen görüntü dizine eklenir (PIL'de "P" modu), dolayısıyla saydamlık PNG alfa kanalı içinde değil, meta veri bilgisinde ayarlanır.

yapabilirsiniz aşağıdaki kodla şeffaf arka plan paleti dizini olsun: Eğer sahip olduğunu bilgi görmek için incelemek böylece

from PIL import Image 

img = Image.open('1.png') 
png_info = img.info 
img.save('2.png', **png_info) 

görüntü bilgisi, bir sözlük geçerli:

örn: Eğer Eğer şöyle bir çıktı elde edecektir yazdırmak aşağıdadır:

bilgi yoktur orijinal PNG oluşturulan alet bağlı olarak değişebilir, ama ne önemli olduğuna inanılmaktadır olacak kurtardı
{'transparency': 7, 'gamma': 0.45454, 'dpi': (72, 72)} 

Burada sizin için t "şeffaflık" anahtarıdır. Örnekte palet indeksi "7" nin şeffaf olarak ele alınması gerektiğini söylüyor.

+0

, türünü "RGBA" zorlayabilir, teşekkür ederim! Yine de, bu özelliklerin otomatik olarak kaydedilmemesi garip. –

4

Hep İşe yaradı

img = Image.open('1.png') 
img.convert('RGBA') 
img.save('2.png') 
+5

Tabii ki, ama bu şekilde, orijinaliyle aynı görüntüyü üretmeyecek, formattan itibaren. –

+0

+1. Ahh evet, çok doğru Lucas S. –