【问题标题】:images order while making gif using imageio使用 imageio 制作 gif 时的图像顺序
【发布时间】:2018-11-30 10:16:41
【问题描述】:

我正在使用生成的 .png 文件通过imageio 模块制作 gif。尽管 .png 文件是按数字顺序排序的,但生成的 .gif 动画并不遵循此顺序。是什么原因? 到目前为止,这是我的代码:

png_dir='png'
images=[]
for file_name in os.listdir(png_dir):
    if file_name.endswith('.png'):
        file_path = os.path.join(png_dir, file_name)
        images.append(imageio.imread(file_path))
imageio.mimsave('movie.gif', images, duration=1)

.png 文件就像file_01.png, file_02.png ... file_099.png

为什么生成的 gif 与 .png 文件的顺序不同?

提前感谢您的帮助!

【问题讨论】:

  • 补零时需要相同的位数才能使其工作。你应该使用file_001.png, file_002.png ... file_010.png, file_011.png ... file_099.png
  • 我期待这样的评论。实际上这些 .png 文件是通过循环自动创建的,所以我无法控制它们的位数。 @Mike Scotty 的下一条评论显示了一个更好的解决方案
  • 这是不正确的 - 在制定文件名时,您确实可以控制数字的格式 - 例如,您可以使用 %04d 作为格式。
  • 感谢您的指点!实际上,随着我的 png 文件数量的增加,我将编号从序列号更改为日期。

标签: python png animated-gif python-imageio


【解决方案1】:

假设文件是有序的,但是os.listdir 状态的docs(强调我的):

os.listdir(path='.')

返回一个列表,其中包含路径给定的目录中条目的名称。 列表顺序随意,不包括特殊条目“.”和 '..' 即使它们存在于目录中。

您可以自己对返回的列表进行排序:

for file_name in sorted(os.listdir(png_dir)):

注意:Python 没有内置的自然排序。如果这就是你要找的,你应该检查这个问题的答案:Does Python have a built in function for string natural sort?

【讨论】:

  • 感谢您的回答。这正是我所需要的!
猜你喜欢
  • 1970-01-01
  • 2016-05-07
  • 2016-06-20
  • 2013-06-17
  • 2016-12-19
  • 1970-01-01
  • 2017-08-26
  • 2013-09-05
  • 1970-01-01
相关资源
最近更新 更多