定义 ImageMagick 转换的文件顺序

Posted

技术标签:

【中文标题】定义 ImageMagick 转换的文件顺序【英文标题】:Defining the file order for ImageMagick convert 【发布时间】:2012-09-02 14:09:51 【问题描述】:

我有一堆名为foo<bar>.pngPNG 文件,我希望转换为TIF 动画。 <bar> 是一个从 0 到 25 变化的数字,以 5 为单位。 ImageMagick 将foo5.png 放在动画的最后,而它应该是第二个。除了将文件重命名为foo05.png 之外,还有什么方法可以将其放置在正确的位置?

【问题讨论】:

用数字前导零重命名图像,例如 foo005.png。通配符 * 按字母顺序而非数字顺序读取图像。因此,前导零将导致您的文件名在被通配符访问时按字母顺序列出。 【参考方案1】:

如果您的输入图像多于无法输入的方便程度(例如 foo0..foo100.png),您可以这样做(在 Linux、Unix 和 Mac OS X 上):

convert                                                  \
  -delay 10                                              \
   $(for i in $(seq 0 5 100); do echo foo$i.png; done) \
  -loop 0                                                \
   animated.gif

【讨论】:

请注意,您也可以使用它来反转 GIF 的顺序:$(seq 100 -5 0) 注意如果你只是想颠倒正常的顺序你可以使用这个方法但是用$(ls -r *.png)替换子命令。【参考方案2】:

简单易行,列出您的图像并对其进行排序:

convert -delay 10 -loop 0 $(ls -1 *.png | sort -V) animated.gif

【讨论】:

【参考方案3】:

您只需按照它们应该出现在动画中的顺序给出您的 PNG 文件的顺序。使用:

foo0.png foo5.png foo10.png foo15.png foo20.png foo25.png

而不是

foo*.png

毕竟,只有 6 个不同的文件名应该很容易输入:

convert                                                      \
  -delay 10                                                  \
   foo0.png foo5.png foo10.png foo15.png foo20.png foo25.png \
  -loop 0                                                    \
   animated.gif

【讨论】:

@Yotam:你看到我的其他答案了吗? 'upvote' 还不够好吗? 在文件名的数字部分使用前导零编写此类文件很有帮助;然后你可以说“*.png”并按正确的顺序获取它们。即 foo00.png foo05.png foo15.png foo20.png foo25.png.【参考方案4】:

您可以将“查找”与“排序”一起使用:

convert -delay 10 $(find . -name "*.png" -print0 | sort -zV | xargs -r0 echo) -loop 0 animated.gif

【讨论】:

为什么使用find 而不是ls?为什么xargs?请参阅我的答案以获得更简单的解决方案。【参考方案5】:

或者,如果您对 python 有所了解,那么您可以轻松地从 python shell 中获得它的帮助。

通过在终端中输入python 来打开python shell。并应用以下魔法-

# Suppose your files are like 1.jpeg, 2.jpeg etc. upto 100.jpeg
files = []
for i in range(1, 101):
    files.append('.jpeg'.format(i))
command = 'convert -delay 10  -loop 0 animated.gif'.format(' '.join(files))
from subprocess import call
call(command, shell=True)

你的工作应该完成了!

【讨论】:

【参考方案6】:

比 ls 和 sort 更简单的是使用 ls 的内置 -v 选项:

convert -delay 10 -loop 0 `ls -v *.png` animated.gif

`...` 被执行而不是解释为字符串。

【讨论】:

以上是关于定义 ImageMagick 转换的文件顺序的主要内容,如果未能解决你的问题,请参考以下文章

ImageMagick 的转换:未定义图像

安装imagemagick

ImageMagick:转换以保持转换后图像的相同名称

Imagemagick 将 png 转换为 jxr

在 ImageMagick 中从 GIF 获取第一个转换的 PNG 文件

ImageMagick 使用格式化的文件名转换裁剪