python自动合成图片为gif,并能根据第一张图片自动统一图片尺寸

网上找来合成图片成gif的代码,没想到运行报错:
Traceback (most recent call last): File “D:\code\python\binance-quantization-master\tools\giftool.py”, line 5, in <module> import imageio.v3 as iio ModuleNotFoundError: No module named ‘imageio.v3’

明明已经运行 pip install imageio 安装模块了。后来分析可能版本旧了,重新升级模块: pip install –upgrade imageio

随便找来几张图片试验:

Traceback (most recent call last): File “D:\code\python\binance-quantization-master\tools\giftool.py”, line 16, in <module> iio.imwrite(‘movie.gif’, images, duration=3, loop=0) File “D:\aiBigData\anaconda3\lib\site-packages\imageio\v3.py”, line 147, in imwrite encoded = img_file.write(image, **kwargs) File “D:\aiBigData\anaconda3\lib\site-packages\imageio\plugins\pillow.py”, line 389, in write ndimage = np.stack(ndimage, axis=0) File “D:\aiBigData\anaconda3\lib\site-packages\numpy\core\shape_base.py”, line 449, in stack raise ValueError(‘all input arrays must have the same shape’) ValueError: all input arrays must have the same shape

导致错误的原因是所有输入的图像数组必须具有相同的形状。这意味着合成 GIF 时,要确保所有的图像具有相同的宽度和高度。 在实际应用场景,也很有可能尺寸大小有轻微不同。

一种简单的方法是使用 PIL 库来调整图像的大小 。

原来的代码:

import imageio.v3 as iio
import os

png_dir = 'images'
images = []

# list file in folder 'images' and sort them by name
image_list = [os.path.join(png_dir, f) for f in os.listdir(png_dir) if f.endswith('.png')]
image_list.sort()

# append images to list
for file_name in image_list:
    images.append(iio.imread(file_name))

# save as gif file
iio.imwrite('movie.gif', images, duration=3, loop=0)

修改后代码:

import imageio.v3 as iio
import os
from PIL import Image

png_dir = 'd:\\tmp'
images = []

# list file in folder 'images' and sort them by name
image_list = [os.path.join(png_dir, f) for f in os.listdir(png_dir) if f.endswith('.png')]
image_list.sort()


# 获取第一张图像的尺寸
first_image = Image.open(os.path.join(png_dir, image_list[0]))
target_size = first_image.size

# 循环处理图像并调整大小
for file_name in image_list:
    image = Image.open(file_name)
    resized_image = image.resize(target_size)
    images.append(resized_image)


# save as gif file
iio.imwrite('movie.gif', images, duration=3, loop=0)

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注