img = Image.open(filename)
if img.mode == "RGBA" or "transparency" in img.info:
# image uses transparency
투명성은 GIF와 함께 작동하는 방법에 대한 here보기 (8 비트, PNG 파일, 팔레트 화).
거짓 긍정의 경우 은입니다. GIF는 색상을 투명하게 정의 할 수 있지만 사용하지는 않습니다. 나는 이것이 꽤 드물다는 것을 상상한다. 왜 투명성을 위해 색을 버리고 사용하지 않는가? (당신의 가짜 부정은 가능하지 않습니다.)
투명도가 실제로 사용되는지 여부를 알아야하는 경우 투명 색상이 다른 색상 (예 : 흑백)에 매핑되는 이미지의 두 가지 버전을 만들 수 있습니다.) 다음 비교하십시오. 차이점이 있으면 이미지에 투명도가 사용됩니다. 그래서 같이 :
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 비트 PNG의 경우 현재 방법이 작동하지 않을 것이므로 항상 'P'모드를 반환합니다. 이 경우 GIF와 비슷하게 처리해야합니다. –