- У меня есть список .png (PIL) изображений, которые я хочу соединить вместе в анимированный GIF
- Чтобы сделать это, я в настоящее время с помощью
imageio
библиотеки - Однако, я не могу найти способ сделать это производить хорошего качества гифы
насколько я знаю, есть два типа настроек можно изменить. Настройки imageio.imread()
для чтения .png и настройки imageio.mimwrite()
для написания gif. По imageio.help()
,imageio: Как повысить качество выходных gifs?
imageio.imread()
имеет один чтения только для параметра ЯPNG-PIL
,ignoregamma
, которая принимает логическое значение. Это ничего не меняет для моих выходных gif.imageio.mimwrite()
может относиться к двум форматам. Первый -GIF-PIL
. Выход из этого формата показывает только один кадр и, следовательно, нежелателен. Output here.imageio.mimwrite()
имеет второй форматGIF-FI
. Это приводит к более перспективным выходам со следующими параметрами:'quantizer':'wu'
генерирует полный GIF с заданными рамками и частотой кадров, но производит «испорченный» вид-качества. Output here.'quantizer':'nq'
генерирует полный gif с лучшим «менее поврежденным» качеством, чем «wu», но не обрабатывает цвет хорошо. Обратите внимание, как легенда в правом нижнем углу имеет тенденцию изменять ее цвет. Output here.
Вот соответствующий код для самого лучшего качества, я мог бы получить до сих пор (GIF-FI
с nq
)
def gen_gif(self, datetime_list):
kwargs_write = {'fps':5.0, 'quantizer':'nq'}
frames = []
for datetime in datetime_list:
frames.append(imageio.imread(datetime+'.png'))
exportname = '{} to {}.gif'.format(datetime_list[0], datetime_list[-1])
imageio.mimsave(exportname, frames, 'GIF-FI', **kwargs_write)
Функция вызывается с одним списком параметров строк, содержащих полный путь к изображениям .png для компиляции в gif.