Files

41 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Usage: python3 dupeframes.py image.png...
Check for duplicate frames in Pokemon sprites (vertical strips of square frames).
Copyright (c) 2024, Rangi42
SPDX-License-Identifier: MIT
"""
import sys
import png
def duplicate_frames(filename):
with open(filename, 'rb') as file:
width, height, rows = png.Reader(file).asRGBA8()[:3]
rows = list(rows)
if height % width:
print(f'{filename} is not a vertical strip of square frames!', file=sys.stderr)
return
num_frames = height // width
frames = [rows[i*width:(i+1)*width] for i in range(num_frames)]
yield from ((i, j) for i in range(num_frames) for j in range(i+1, num_frames) if frames[i] == frames[j])
def main():
if len(sys.argv) < 2:
print(f'Usage: {sys.argv[0]} image.png...', file=sys.stderr)
sys.exit(1)
for filename in sys.argv[1:]:
if not filename.lower().endswith('.png'):
print(f'{filename} is not a .png file!', file=sys.stderr)
else:
for (i, j) in duplicate_frames(filename):
print(f'{filename}: frame {j} is a duplicate of frame {i}')
if __name__ == '__main__':
main()