47 lines
2.3 KiB
Python
47 lines
2.3 KiB
Python
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) |