从 pngs 创建 gif:循环图像似乎太快了,只能在调试模式下工作
Posted
技术标签:
【中文标题】从 pngs 创建 gif:循环图像似乎太快了,只能在调试模式下工作【英文标题】:Creating a gif from pngs: looping through images seems too fast and only works in debug mode 【发布时间】:2021-01-06 16:17:16 【问题描述】:我正在尝试从几个(在本例中只有 5 个)png 文件创建一个 gif 图像。如果我在图像循环发生时调试代码,我可以创建 gif。否则执行似乎太快了。这是我的代码:
img, *imgs = [Image.open(f) for f in sorted(glob.glob(png_in))]
所以我将列表理解展平并添加并使用time.sleep(x)
:
ImageFile.LOAD_TRUNCATED_IMAGES = True
imgs = []
for f in sorted(glob.glob(png_in)):
i = Image.open(f)
time.sleep(1)
imgs.append(i)
然后我没有使用PIL模块,而是切换到imageio
模块:
images = []
png_list = sorted(glob.glob(png_in))
for filename in png_list:
print(f"fn: filename")
images.append(imageio.imread(filename))
time.sleep(1)
imageio.mimsave(gif_file, images)
我可能会出错的任何想法?例如,我收到的错误消息是:
unknown element "blank"
i = Image.open(f)
【问题讨论】:
“太快了”什么到底是什么?你想做什么,实际问题是什么?尝试检查文件列表中的名称 - 您可能会选择点文件或无效文件。 @MarkSetchell:太快了,我的意思是在 pycharm 中简单地运行脚本是行不通的,并且在 for 循环中会抛出错误消息(好像打开图像需要太长时间)。如果我调试,请在 for 循环所在的位置添加一个要点,然后按 F8,一切都会相应地工作。 尝试检查sorted(glob.glob(png_in))
@MarkSetchell:它只是一个字符串列表(每个 *.png 的路径和文件名)。
@MarkSetchell:谢谢马克(见下面我的回答)。
【参考方案1】:
感谢 Mark Setchell....我发现的问题是在执行 for 循环时 png 并不全部存在。我正在使用openscad创建png文件,在这里我需要实现一个time.sleep
。在调试模式下,由于速度较慢,openscad 有时间创建 png,因此您看不到这个问题。
【讨论】:
很好侦查!感谢您与 SO 社区分享。以上是关于从 pngs 创建 gif:循环图像似乎太快了,只能在调试模式下工作的主要内容,如果未能解决你的问题,请参考以下文章