19

有没有办法在使用imageioin制作时压缩 gif python?我正在用大约 200 张图像制作 gif,最终文件为 30MB。如果它是 5-10 MB,我会更喜欢。无论如何,图像是单色的,所以应该可以压缩。有没有我可以使用或指定的工具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('timestamp_')), key = numericalSort)

#gif writer
with io.get_writer('output_gif.gif', mode='I', duration=0.1) as writer:
    for filename in file_names:
        image = io.imread(filename)
        writer.append_data(image)
4

2 回答 2

4

面对同样的问题,我为gifsicle库创建了一个名为pygifsicle的包装器,可以按如下方式使用它:

from pygifsicle import optimize
optimize("path_to_my_gif.gif")

与 pip 上的所有其他软件包一样,可以通过运行以下命令来安装它:

pip install pygifsicle

imageio 文档中提供了使用此库的完整示例。

在安装 pygifsicle 时,如果您在 MacOS 上,您还将自动安装使用Brew的 gifsicle 库。对于其他系统,将提供分步指南,它基本上只是要求在 Debian / Ubuntu 上通过 apt-get 安装库(因为在软件包设置中不要求 sudo 似乎是个好主意) :

sudo apt-get install gifsicle

或者在 Windows 上,您可以安装可用的端口之一

于 2019-09-22T10:26:15.977 回答
0

另一种方法是在创建 gif 之前调整图像的大小并降低图像的质量。

from PIL import Image
# Resizing
image.resize((x, y), Image.ANTIALIAS)
# Reducing Quality
quality_val = 90
image.save(filename, 'JPEG', quality=quality_val)

将图像转换为压缩 gif 的完整代码

from PIL import Image
import glob
x = 250
y = 250
fp_in = 'path/to/images'
fp_in = 'path/to/gif/output'
q = 50 # Quality
img, *imgs = [Image.open(f).resize((x,y),Image.ANTIALIAS) for f in sorted(glob.glob(fp_in))] 
img.save(fp=fp_out, format='GIF', append_images=imgs,quality=q, 
         save_all=True, duration=15, loop=0, optimize=True)
于 2021-09-12T05:03:18.823 回答