Imageio в python: сжатие gif
Есть ли способ сжать gif при создании imageio
в python
? Я делаю gif с около 200 изображениями, а окончательный файл - 30 МБ. Я бы предпочел, если это 5-10 МБ. В любом случае изображения монофонического цвета должны быть хорошо сжаты. Есть ли инструмент, который я могу использовать или указать его с помощью imageio
?
Вот мой код, чтобы сделать gif:
import os
import imageio as io
import re
#############################################################
#key to sort the file_names in order
numbers = re.compile(r'(\d+)')
def numericalSort(value):
parts = numbers.split(value)
parts[1::2] = map(int, parts[1::2])
return parts
############################################################
file_names = sorted((fn for fn in os.listdir('.') if fn.startswith('surface')), key = numericalSort)
#gif writer
with io.get_writer('python_growth.gif', mode='I', duration=0.1) as writer:
for filename in file_names:
image = io.imread(filename)
writer.append_data(image)
Ответы
Ответ 1
Столкнувшись с той же проблемой, я создал оболочку для библиотеки gifsicle с именем pygifsicle, и ее можно использовать следующим образом:
from pygifsicle import optimize
optimize("path_to_my_gif.gif")
Как и любой другой пакет в pip, его можно установить, запустив:
pip install pygifsicle
Полный пример использования этой библиотеки доступен в документации imageio.
При установке pygifsicle вы также автоматически установите, если вы используете MacOS, библиотеку gifsicle с помощью Brew. Для других систем будет предоставлено пошаговое руководство, которое в основном просто просит установить библиотеку с помощью apt-get в Debian/Ubuntu (так как кажется хорошей идеей не запрашивать sudo в настройке пакета) :
sudo apt-get install gifsicle
Или в Windows вы можете установить один из доступных портов.