Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,使用ImageMagick将png转换为gif_Python_Imagemagick_Png_Gif_Os.system - Fatal编程技术网

Python,使用ImageMagick将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.

我使用的是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.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)