从 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:循环图像似乎太快了,只能在调试模式下工作的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将图像文件夹(png、gif)转换为 Python 中的数组列表?

停止循环的 GIF 图标

1行Python代码,实现PDF转图片,速度太太太太太快了

换上 HikariCP 连接池,太快了!

WCF 服务在 WebForm 中调用太快?

Stripe 在订阅的应用程序方面的费用,试图在发票上进行更新,但它太快了