【发布时间】:2015-07-18 07:28:38
【问题描述】:
我在内存中有一个图像,我希望使用 Python 的 subprocess 执行 imagemagick 的 convert 方法。虽然这条线使用 Ubuntu 的终端运行良好:
cat image.png | convert - new_image.jpg
这段代码不能使用 Python:
jpgfile = Image.open('image.png');
proc = Popen(['convert', '-', 'new_image.jpg'], stdin=PIPE, shell=True)
print proc.communicate(jpgfile.tostring())
我还尝试在不使用 PIL 的情况下将图像作为常规文件读取,我尝试在 subprocess 方法和写入标准输入的不同方式之间切换。
最好的部分是,什么都没有发生,但我没有遇到真正的错误。打印标准输出时,我可以在终端上看到 imagemagick 帮助,然后是以下内容:
默认情况下,`file'的图片格式是由它的魔力决定的 数字。要指定特定的图像格式,请在文件名之前 带有图像格式名称和冒号(即 ps:image)或指定 图像类型作为文件名后缀(即 image.ps)。将“文件”指定为 '-' 用于标准输入或输出。 (无,无)
也许这里有我没有得到的提示。 请指出正确的方向,我是 Python 新手,但根据我使用 PHP 的经验,这应该是一项非常容易的任务,或者我希望如此。
编辑:
这是我最终用来处理 PIL 图像对象而不保存临时文件的解决方案。希望它可以帮助某人。 (在示例中,我从本地驱动器读取文件,但想法是从远程位置读取图像)
out = StringIO()
jpgfile = Image.open('image.png')
jpgfile.save(out, 'png', quality=100);
out.seek(0);
proc = Popen(['convert', '-', 'image_new.jpg'], stdin=PIPE)
proc.communicate(out.read())
【问题讨论】:
标签: python image shell imagemagick subprocess