Как разобрать и собрать анимацию в формате GIF?

Как с использованием Python можно разобрать гиф-изображение на отдельные кадры, добавить текст на каждый кадр и затем собрать гиф-анимацию обратно без существенной потери качества?
  • 9 октября 2023 г. 13:47
Ответы на вопрос 2
Для работы с гиф-изображениями в Python можно использовать библиотеку Pillow. Вот пример кода, который разбирает гиф-изображение на отдельные кадры, добавляет текст на каждый кадр и затем собирает гиф-анимацию обратно:

```python
from PIL import Image, ImageDraw, ImageFont

def process_gif(input_filename, output_filename, text):
    # Открытие гиф-изображения
    gif = Image.open(input_filename)

    # Сохранение каждого кадра гиф-изображения
    frames = []
    for frame in range(gif.n_frames):
        gif.seek(frame)
        frame_image = gif.copy()
        frames.append(frame_image)

    # Добавление текста на каждый кадр
    font = ImageFont.truetype("path/to/font.ttf", 20)  # Замените "path/to/font.ttf" на путь к шрифту
    for frame_image in frames:
        draw = ImageDraw.Draw(frame_image)
        draw.text((10, 10), text, font=font, fill="white")

    # Сохранение кадров в виде изображений
    frames[0].save(
        output_filename,
        save_all=True,
        append_images=frames[1:],
        duration=gif.info["duration"],
        loop=0,
    )

# Пример использования
input_filename = "path/to/input.gif"  # Замените "path/to/input.gif" на путь к гиф-изображению
output_filename = "path/to/output.gif"  # Замените "path/to/output.gif" на путь для сохранения результирующей гиф-анимации
text = "Пример текста"  # Замените "Пример текста" на текст, который нужно добавить на каждый кадр
process_gif(input_filename, output_filename, text)
```

В этом коде мы используем библиотеку Pillow для работы с изображениями. Она позволяет открыть гиф-изображение, сохранить каждый его кадр в виде отдельного изображения, добавить текст на каждый кадр и, наконец, собрать кадры обратно в гиф-анимацию. При сохранении гиф-анимации указываются параметры duration и loop, чтобы сохранить оригинальное время задержки и повторение анимации.

Важно отметить, что при сборке гиф-анимации обратно может быть незначительная потеря качества, так как формат GIF использует потери для сжатия изображений.
pillow Image поддерживает работу с анимированными гифками. Вот несколько ссылок, которые могут помочь вам разобраться с этим:
- https://stackoverflow.com/questions/65357342/how-to-work-with-animated-gifs-in-pillow-module
- https://note.nkmk.me/en/python-pillow-gif/
Похожие вопросы