|
@@ -46,6 +46,17 @@ 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')
|
|
|
+ image = image.convert('RGBA')
|
|
|
+
|
|
|
if __name__ == '__main__':
|
|
|
OUTPUT_SIZE = (48,48)
|
|
|
if len(sys.argv) < 2:
|
|
@@ -57,7 +68,8 @@ 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')
|
|
|
+ frameImage = Image.open(io.BytesIO(res["msg"][frameIndex]),formats=['cur'])
|
|
|
+ CURPaletteFix(frameImage)
|
|
|
extracted_frame = frameImage.resize(OUTPUT_SIZE)
|
|
|
position = (0, OUTPUT_SIZE[0] * frameIndex)
|
|
|
output.paste(extracted_frame, position)
|