diff --git a/readme.md b/readme.md index b726a9d..aeff1db 100644 --- a/readme.md +++ b/readme.md @@ -1,9 +1,11 @@ # Скрипты + В этой директории находятся полезные для проекта скрипты позволяющие автоматизировать процесс разработки. ## Создать картинку из массива байт Скрипт принимает 3 обязательных аргумента: + - Путь к текстовому документу в котором находиться перечисление байтов - Ширина выходной изображения - Длина выходного изображения @@ -19,10 +21,22 @@ ## Создать карту изображений из директории в формате Excel файла Скрипт принимает 2 обязательных параметра: -- Путь к целевому каталогу с изображениями -- Путь к выходному файлу в формате *.xlsx или *.xls в котором будут находиться: - - Название изображения - - Размер изображения - - Эскиз изображения -Работает на текущий момент с популярными форматами: `'.png', '.jpg', '.jpeg', '.gif', '.bmp'`. \ No newline at end of file +- Путь к целевому каталогу с изображениями +- Путь к выходному файлу в формате *.xlsx или*.xls в котором будут находиться: + - Название изображения + - Размер изображения + - Эскиз изображения + +Работает на текущий момент с популярными форматами: `'.png', '.jpg', '.jpeg', '.gif', '.bmp'`. + +## Разделить картинку на части + +Скрипт `split_image.py` позволяет легко разделить изображение на части одинаковой ширины и длины в формате `.png`. + +Принимает 4 аргумента: + +- Путь к исходному изображению в формате `.png` +- Путь к каталогу, в котором будут размещены фрагменты `.png` +- Ширина +- Длина diff --git a/split_image.py b/split_image.py new file mode 100644 index 0000000..0ccca63 --- /dev/null +++ b/split_image.py @@ -0,0 +1,47 @@ +import os +import argparse +from PIL import Image + +def split_image(image_path, output_folder, part_width, part_height): + # Открываем изображение + img = Image.open(image_path) + img_width, img_height = img.size + + # Вычисляем количество частей по ширине и высоте + num_parts_x = img_width // part_width + num_parts_y = img_height // part_height + + # Создаем выходную папку, если её нет + if not os.path.exists(output_folder): + os.makedirs(output_folder) + + for i in range(num_parts_x): + for j in range(num_parts_y): + # Вычисляем координаты для обрезки + left = i * part_width + upper = j * part_height + right = left + part_width if i < num_parts_x - 1 else img_width # Последняя часть берёт остаток + lower = upper + part_height if j < num_parts_y - 1 else img_height # Последняя часть берёт остаток + box = (left, upper, right, lower) + + # Обрезаем изображение + part = img.crop(box) + + # Сохраняем обрезанное изображение + part.save(os.path.join(output_folder, f'part_{i + 1}_{j + 1}.png')) + + print(f'Изображение успешно разрезано на части размером {part_width}x{part_height} и сохранено в "{output_folder}".') + +if __name__ == "__main__": + # Настраиваем парсер аргументов + parser = argparse.ArgumentParser(description='Разрезать изображение на части заданного размера.') + parser.add_argument('image_path', type=str, help='Путь к изображению PNG') + parser.add_argument('output_folder', type=str, help='Путь к папке для сохранения частей') + parser.add_argument('part_width', type=int, help='Ширина каждой части') + parser.add_argument('part_height', type=int, help='Высота каждой части') + + # Парсим аргументы + args = parser.parse_args() + + # Вызываем функцию разрезания изображения + split_image(args.image_path, args.output_folder, args.part_width, args.part_height) \ No newline at end of file