Python,使用ImageMagick将png转换为gif
我使用的是Python2.7.6,在将一些png文件转换为gif时遇到问题(为了创建动画) 这就是我犯的错误Python,使用ImageMagick将png转换为gif,python,imagemagick,png,gif,os.system,Python,Imagemagick,Png,Gif,Os.system,我使用的是Python2.7.6,在将一些png文件转换为gif时遇到问题(为了创建动画) 这就是我犯的错误 ParamŠtre non valide-1如果没有足够的信息,这只是一个猜测,但是 如果output\u dir中有空格、引号或其他特殊字符,则不会对它们进行转义或引用,因此命令行的外观如下所示: convert -delay 1 -dispose Background +page ~/My Pictures/*.png -loop 0 ~/My Pictures/animation.
ParamŠtre non valide-1如果没有足够的信息,这只是一个猜测,但是 如果
output\u dir
中有空格、引号或其他特殊字符,则不会对它们进行转义或引用,因此命令行的外观如下所示:
convert -delay 1 -dispose Background +page ~/My Pictures/*.png -loop 0 ~/My Pictures/animation.gif
也许~/My
是发送输入的一个非常有效的参数,而Pictures/*.png
恰好解析为一大堆convert
愿意作为附加输入处理的附加相对路径,但是您就得到了输出的~/My
,这是无效的,因为它与输入相同,Pictures/animation.gif
作为附加参数附加在末尾,convert
不知道如何处理
您可以通过使用repr(output_dir)
来解决这个问题,这将执行适当的Python文字引用,这通常但并不总是足够好,可以用作bash引用……但这是一个非常糟糕的主意
更好的方法是让Python为您进行适当的引用。正如文件所说:
子流程
模块为生成新流程和检索其结果提供了更强大的工具;使用该模块比使用此功能更可取
使用,您可以只传递一个参数列表,而不是试图将它们形成一个有效的命令行,甚至不使用shell,尽管这样您就需要自己进行全局处理,而不是让shell来完成
在使用时,最好使用os.path
方法而不是字符串方法来处理路径
例如:
args = (['convert', '-delay', '1', '-dispose', 'Background', '+page'] +
glob.glob(os.path.join(output_dir, '*.png')) +
['-loop', '0', os.path.join(output_dir, 'animation.gif')])
subprocess.check_call(args)
或者,您也可以使用shell,但如文档所解释的,可以使用为您引用每个参数
更好的解决方案是首先使用这三种工具中的任何一种,而不是试图构建命令行来驱动ImageMagick命令行工具。您使用
os.system
而不是建议的子流程
,有什么原因吗?或者,更好的方法是使用到ImageMagick的Python绑定,而不是尝试编写命令行工具的脚本?还有,output\u dir
?它是否有空格、引号或其他特殊字符?更一般地说,您能否打印与发送到os.system
的字符串完全相同的字符串,以查看它的外观?然后验证如果您将完全相同的字符串粘贴到shell中,它是否工作?作为补充说明,如果您的终端实际显示的是“ParamŠtre non valide”而不是“Paramétre non valide”,那么您的编码或语言环境可能在某个地方设置错误。(这看起来像是用一些西欧字符集(如Latin-1)输出文本,然后将其显示为一些东欧字符集(如Latin-9)时得到的。)谢谢,这确实帮了我很大的忙。我知道是和旧线程,但发生此错误可能是因为它正在执行另一个转换实用程序,可能是windows转换分区实用程序。您是否已使用“遗留”程序安装Inagemagick?或者你检查过路径了吗?
args = (['convert', '-delay', '1', '-dispose', 'Background', '+page'] +
glob.glob(os.path.join(output_dir, '*.png')) +
['-loop', '0', os.path.join(output_dir, 'animation.gif')])
subprocess.check_call(args)