cmd/imagesequence_to_images.py

43 lines
1.3 KiB
Python

import argparse
import PIL.Image
import PIL.ImageSequence
import sys
from voussoirkit import betterhelp
from voussoirkit import pathclass
from voussoirkit import pipeable
from voussoirkit import vlogging
log = vlogging.getLogger(__name__, 'imagesequence_to_images')
def imagesequence_to_images_argparse(args):
for input_file in pathclass.glob_many_files(args.input_files):
input_file = pathclass.Path(input_file)
basename = input_file.replace_extension('').basename
input_image = PIL.Image.open(input_file.absolute_path)
for (index, image) in enumerate(PIL.ImageSequence.Iterator(input_image)):
this_png = input_file.parent.with_child(f'{basename}_{index+1:04d}.png')
pipeable.stdout(this_png.absolute_path)
image.save(this_png.absolute_path)
return 0
@vlogging.main_decorator
def main(argv):
parser = argparse.ArgumentParser(
description='''
Some file formats like TIFF can contain multiple images. This program
extracts them to separate PNG files.
''',
)
parser.add_argument(
'input_files',
nargs='+',
)
parser.set_defaults(func=imagesequence_to_images_argparse)
return betterhelp.go(parser, argv)
if __name__ == '__main__':
raise SystemExit(main(sys.argv[1:]))