我正在使用tempfile
模块和imagemagick
,当我尝试运行此代码时:
width = height = 100
temp_file = tempfile.NamedTemporaryFile()
canvas = "convert -size {}x{} canvas:black {}/canvas.png".format(scale_width, scale_height, temp_file.name)
os.system(canvas)
我收到以下错误:
转换:无法打开图片
/var/folders/jn/phqf2ygs0wlgflgfvvv0ctbw0009tb/T/tmpeMcIuh/canvas.png': Not a directory @ error/blob.c/OpenBlob/2705. convert: WriteBlob Failed
/变种/文件夹/ JN / phqf2ygs0wlgflgfvvv0ctbw0009tb / T / tmpeMcIuh / canvas.png' @ error / png.c / MagickPNGErrorHandler / 1630。
可能是什么问题? 我只想创建一个存储在随机生成的临时文件中的黑色图像(分辨率为100x100)。
谢谢!
答案 0 :(得分:1)
你必须离开/canvas.png
位。 tempfile.NamedTemporaryFile()
创建的临时文件为/var/folders/jn/phqf2ygs0wlgflgfvvv0ctbw0009tb/T/tmpeMcIuh
。因此,将它用作输出文件的父目录会通过imagemagick引发错误。
要通过文件扩展名指定输出格式PNG,可以使用suffix
关键字参数创建临时文件:
temp_file = tempfile.NamedTemporaryFile(suffix='.png')
此外,您应该使用subprocess
模块来运行子进程。这样你就不必使用字符串格式化整个命令来传递子进程'争论,例如
subprocess.check_call(['convert',
'-size', '{}x{}'.format(scale_width, scale_height),
'canvas:black',
temp_file.name])
另一个评论:NamedTemporaryFile()
打开一个文件描述符,你应该立即关闭它。文档还声明您负责再次删除该文件。