Fix transparency missing with indexed color

This commit is contained in:
Mike L 2025-04-30 00:14:20 +02:00
parent b4e2de09b2
commit d57a50bedd
Signed by: mikeslab
GPG key ID: 48CCD1768D862D40
3 changed files with 35 additions and 5 deletions

View file

@ -46,6 +46,16 @@ def analyzeANIFile(filePath):
nowSize += subChunkSize
return {"code":0,"msg":frameList,"frameRate":frameRate}
def CURPaletteFix(image):
# type: (Image.ImageFile.ImageFile) -> None
if (image.mode == 'P'):
palette = list(image.palette.getdata()[1])
for i in range(4, len(palette), 4):
if sum(palette[i:i + 3]) == 0:
break
palette[i + 3] = 255
image.putpalette(palette, 'BGRA')
if __name__ == '__main__':
OUTPUT_SIZE = (48,48)
if len(sys.argv) < 2:
@ -57,8 +67,9 @@ if __name__ == '__main__':
logging.info('ANI文件分析完成帧提取完成')
output = Image.new("RGBA", (OUTPUT_SIZE[0], OUTPUT_SIZE[1] * len(res["msg"])))
for frameIndex in range(len(res["msg"])):
frameImage = Image.open(io.BytesIO(res["msg"][frameIndex]),formats=['cur']).convert('RGBA')
extracted_frame = frameImage.resize(OUTPUT_SIZE)
frameImage = Image.open(io.BytesIO(res["msg"][frameIndex]),formats=['cur'])
CURPaletteFix(frameImage)
extracted_frame = frameImage.convert('RGBA').resize(OUTPUT_SIZE)
position = (0, OUTPUT_SIZE[0] * frameIndex)
output.paste(extracted_frame, position)
if(len(sys.argv) >= 3):