Как нарезать фото или видео на стикеры и эмодзи?

Для создания стикерпаков из фото или видео можно использовать множество разных способов. Сейчас я покажу один из самых быстрых.

Стикерпак из разрезанного видео
Стикерпак из разрезанного видео

Наверное вы уже видели такие стикерпаки:

Стикерпак из нарезанной картинки
Стикерпак из нарезанной картинки

Если поискать статьи как так сделать - вы найдёте множество людей, которые режут картинки в фотошопе и экспортируют их для веба.

Я считаю, что этот способ не очень удобный. К тому же, как тогда разрезать видео?

Поэтому я написал 2 простых скрипта на Python, которые разрезают картинки и видео под стикеры и эмодзи!

Как разрезать фото

Устанавливаем библиотеку pillow и запускаем скрипт:

from PIL import Image squares_amount = 5 # 5 стикеры, 8 эмодзи image = Image.open(input("Введите путь к файлу: ")) square_size = image.size[0] // squares_amount cropped_images = [] for i in range(squares_amount): for j in range(squares_amount): left = j * square_size top = i * square_size right = (j + 1) * square_size bottom = (i + 1) * square_size cropped_image = image.crop((left, top, right, bottom)) cropped_images.append(cropped_image) counter = 0 for cropped_image in cropped_images: cropped_image.save(f"{counter}.png") counter += 1

Если разрезаете фото под стикеры - ставьте 5 квадратов, если эмодзи - 8.
Вставляем в консоль путь к файлу и видим следующее

Скрипт разрезал наше фото!
Скрипт разрезал наше фото!

Как разрезать видео

Для видео всё аналогично, правда нужно установить opencv-python и imageio.

import cv2 import imageio squares_amount = 5 # 5 стикеры, 8 эмодзи def save_square_videos(video_path): video = cv2.VideoCapture(video_path) total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) frame_width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)) square_size = min(frame_width, frame_height) // squares_amount output_videos = [] for index in range(squares_amount**2): filename = f"{index}.mp4" output_videos.append(imageio.get_writer(filename, fps=video.get(cv2.CAP_PROP_FPS))) for frame_number in range(total_frames): success, frame = video.read() if not success: break squares = [] for i in range(squares_amount): for j in range(squares_amount): square = frame[i * square_size:(i + 1) * square_size, j * square_size:(j + 1) * square_size] squares.append(square) squares_rgb = [cv2.cvtColor(square, cv2.COLOR_BGR2RGB) for square in squares] # Изменение цветового пространства for index, square_rgb in enumerate(squares_rgb): output_video = output_videos[index] output_video.append_data(square_rgb) for output_video in output_videos: output_video.close() video.release() # Пример вызова функции с указанием пути до видео video_path = input("Путь до видео: ") save_square_videos(video_path)

Что делать дальше?

Теперь заходите в fstikbot и загружаете файлы по порядку. Готово, теперь у вас есть собственные стикеры и эмодзи!

1
Начать дискуссию