Added a script to split the image into several parts.

This commit is contained in:
Egor Tsyganchuk
2024-12-02 17:52:17 +03:00
parent 8e86f44f56
commit 8813ebc56a
2 changed files with 67 additions and 6 deletions

View File

@@ -1,9 +1,11 @@
# Скрипты
В этой директории находятся полезные для проекта скрипты позволяющие автоматизировать процесс разработки.
## Создать картинку из массива байт
Скрипт принимает 3 обязательных аргумента:
- Путь к текстовому документу в котором находиться перечисление байтов
- Ширина выходной изображения
- Длина выходного изображения
@@ -19,10 +21,22 @@
## Создать карту изображений из директории в формате Excel файла
Скрипт принимает 2 обязательных параметра:
- Путь к целевому каталогу с изображениями
- Путь к выходному файлу в формате *.xlsx или *.xls в котором будут находиться:
- Название изображения
- Размер изображения
- Эскиз изображения
Работает на текущий момент с популярными форматами: `'.png', '.jpg', '.jpeg', '.gif', '.bmp'`.
- Путь к целевому каталогу с изображениями
- Путь к выходному файлу в формате *.xlsx или*.xls в котором будут находиться:
- Название изображения
- Размер изображения
- Эскиз изображения
Работает на текущий момент с популярными форматами: `'.png', '.jpg', '.jpeg', '.gif', '.bmp'`.
## Разделить картинку на части
Скрипт `split_image.py` позволяет легко разделить изображение на части одинаковой ширины и длины в формате `.png`.
Принимает 4 аргумента:
- Путь к исходному изображению в формате `.png`
- Путь к каталогу, в котором будут размещены фрагменты `.png`
- Ширина
- Длина

47
split_image.py Normal file
View File

@@ -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)