Подушка делает изображение больше, чем раньше

Я использую подушку Python, чтобы сделать легкий оборот изображения GIF, но я обнаружил, что изображение стало больше размера (10 м), чем раньше (1 м). Кто-нибудь знает, как это сделать? И вот мой код:

from PIL import Image, ImageSequence
from PIL import ImagePalette
with Image.open('sd.gif') as im:
    if im.is_animated:
        frames = [f.copy() for f in ImageSequence.Iterator(im)]
        frames.reverse()
        frames[0].save('out.gif', save_all=True, append_images = frames[1:])   

2 ответа

Решение

Я не могу сказать наверняка, не изучив реальные изображения, но я могу догадаться, что, вероятно, произошло:

Некоторые изображения оптимизированы с помощью метода, который находит пиксели в каждом кадре, где ничего не меняется (или изменяется очень незначительно) от кадра к кадру, и делает их прозрачными вместо сохранения цвета для каждого пикселя, чтобы уменьшить объем данных. Для некоторых изображений с большими статическими областями во многих последовательных кадрах это может быть очень эффективным способом уменьшения размера файла.

Когда вы переворачиваете GIF, кадры должны быть сначала неоптимизированы, иначе будут прозрачные области без каких-либо данных. Это может немного увеличить размер файла. Разница может варьироваться от одного изображения к другому.

Вы, вероятно, можете решить эту проблему, запустив некоторый алгоритм оптимизации gif после создания нового изображения.

Другие вопросы по тегам