From a02f275cb31028589bfbf550b5ff225726e0f051 Mon Sep 17 00:00:00 2001 From: Egor Tsyganchuk Date: Mon, 2 Dec 2024 19:12:43 +0300 Subject: [PATCH] Added a script to crop an image to fit the object size --- crop_to_object.py | 39 +++++++++++++++++++++++++++++++++++++++ readme.md | 9 +++++++++ 2 files changed, 48 insertions(+) create mode 100644 crop_to_object.py diff --git a/crop_to_object.py b/crop_to_object.py new file mode 100644 index 0000000..68f2b9e --- /dev/null +++ b/crop_to_object.py @@ -0,0 +1,39 @@ +import os +import argparse +from PIL import Image + +def crop_to_object(input_folder, output_folder=None): + # Если выходная папка не указана, используем входную + if output_folder is None: + output_folder = input_folder + + # Проверяем, существует ли выходная папка, если нет, создаем ее + if not os.path.exists(output_folder): + os.makedirs(output_folder) + + # Проходим по всем файлам в входной папке + for filename in os.listdir(input_folder): + if filename.endswith('.png'): + img_path = os.path.join(input_folder, filename) + img = Image.open(img_path) + + # Получаем границы непрозрачных пикселей + bbox = img.getbbox() + if bbox: + # Обрезаем изображение + img_cropped = img.crop(bbox) + # Сохраняем обработанное изображение + img_cropped.save(os.path.join(output_folder, filename)) + print(f"Processed {filename}") + +def main(): + parser = argparse.ArgumentParser(description="Crop PNG images to the size of the visible object.") + parser.add_argument('input_folder', type=str, help='Path to the input folder containing PNG images.') + parser.add_argument('output_folder', type=str, nargs='?', default=None, help='Path to the output folder to save processed images. If not provided, the input folder will be used.') + + args = parser.parse_args() + + crop_to_object(args.input_folder, args.output_folder) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/readme.md b/readme.md index aeff1db..be1df14 100644 --- a/readme.md +++ b/readme.md @@ -40,3 +40,12 @@ - Путь к каталогу, в котором будут размещены фрагменты `.png` - Ширина - Длина + +## Обрезка изображения по объекту + +Скрипт `crop_to_object.py` предназначен для обрезки PNG изображений до размеров видимого объекта. Он удаляет прозрачные области изображения и сохраняет результат в указанной папке. Если выходная папка не указана, скрипт перезаписывает оригинальные файлы. + +Скрипт принимает два аргумента командной строки: + +- Папка входных изображений (обязательный аргумент) — путь к папке, содержащей PNG изображения, которые вы хотите обработать. +- Папка выходных изображений (необязательный аргумент) — путь к папке, в которую будут сохранены обработанные изображения. Если этот аргумент не указан, скрипт будет перезаписывать оригинальные файлы в папке входных изображений.