img = Image.open(filename)
if img.mode == "RGBA" or "transparency" in img.info:
# image uses transparency
कैसे पारदर्शिता GIF साथ काम करता है के लिए here देखें (और 8 बिट, palettized, PNG का)।
ध्यान दें कि आपका झूठा सकारात्मक मामला संभव है: एक जीआईएफ एक रंग को पारदर्शी के रूप में परिभाषित कर सकता है लेकिन इसका उपयोग नहीं कर सकता है। मुझे लगता है कि यह काफी दुर्लभ होगा, हालांकि - पारदर्शिता के लिए रंग क्यों फेंक दें और इसका उपयोग न करें? (आपका झूठा नकारात्मक संभव नहीं है।)
फिर भी, अगर आपको पता होना चाहिए कि पारदर्शिता वास्तव में उपयोग की जाती है, तो आप छवि के दो संस्करण बना सकते हैं जिसमें पारदर्शी रंग विभिन्न रंगों में मैप किया जाता है (कहें, काला और सफेद) और फिर उनकी तुलना करें। यदि कोई अंतर है, तो छवि पारदर्शिता का उपयोग करती है। इसलिए जैसा:
def uses_transparency(filename):
img = Image.open(filename)
trans = img.info.get("transparency", None)
if trans is not None:
trans *= 3 # convert color number to palette table index
palette = img.getpalette()
imgs = []
for bg in [0, 255]: # map transparent color first to black, then white
palette[trans:trans+3] = [bg] * 3
img.putpalette(palette)
imgs.append(img.convert("L"))
return bool(ImageChops.difference(*imgs).getbbox())
आप क्या एक 24-बिट PNG वास्तव में अल्फ़ा चैनल का उपयोग करता है को देखने के लिए, सफेद और काले रंग की पृष्ठभूमि पर चिपकाकर और परिणामों की तुलना द्वारा एक समान दृष्टिकोण इस्तेमाल कर सकते हैं।
एक 8-बिट पीएनजी के लिए मैं शर्त लगाऊंगा कि आपकी वर्तमान विधि काम नहीं करती है, यह हर समय मोड 'पी' वापस कर देगी। आपको उस मामले में एक जीआईएफ के समान व्यवहार करने की आवश्यकता होगी। –