1

在我的 django 服务器上,我通过命令行使用 imagemagick 创建了一个图像文件。

cmd = local_file + " -crop 50%x50%+10+10 " + temp_final_file

out, err = subprocess.Popen( cmd.split(), 
                  stdin = subprocess.PIPE,
                  stdout = subprocess.PIPE,
                  stderr = subprocess.PIPE ).communicate()

然后我将文件返回给客户端:

    mt = mimetypes.guess_type( temp_final_file )[0]
    with open( temp_final_file, "rb" ) as f:
       response = HttpResponse( f.read(), mimetype=mt )
    return response

我想知道是否可以避免编写本地文件而直接返回字节?

4

2 回答 2

2

ImageMagick 可以写入其标准输出,因此您实际上并不需要临时文件。试试这个:

cmd = ['convert', local_file, '-crop', '50%x50%+10+10', '-']
new_image = subprocess.check_output( cmd )
response = HttpResponse( new_image, mimetype=mt )

注意:您仍然需要弄清楚 mime 类型。如果没有文件,那可能会更困难。

于 2013-09-11T19:48:52.427 回答
0

f.read() 只是一个 python2 字节串。你可以在那里传递任何东西。

您将不得不使用一些接口,而不是允许您直接检索字节,而不是写入文件。例如,一个 imagemagick 包装器,如下所示:

https://www.assembla.com/wiki/show/pythonmagickwand

于 2013-09-11T19:34:36.950 回答