我想将动态创建的图像发送给我的用户,例如图表,图表等。这些图像是“扔掉”的。图像,它们只会被发送给一个用户,然后被销毁,因此“没有涉及文件”。

我想将图像直接发送给用户,而不是先将其保存在文件系统中。使用PHP,可以通过将HTML文件中的图像链接到PHP脚本来实现,例如:

编辑:SO吞下了我的图片代码:

<img src="someScript.php?param1=xyz">

然后脚本将正确的标题(filetype =&gt; jpeg等)发送到浏览器并直接将图像写回客户端,而不是暂时将其保存到文件系统。

我怎么能用WSGI应用程序做这样的事情。目前我正在使用Python的内部SimpleWSGI服务器。我知道这个服务器主要用于演示目的而不是实际使用,因为它缺乏多线程功能,所以请不要指出这一点,我知道这一点,现在它满足了我的要求: )

是否真的如将URL放入图像标记并使用WSGI处理请求一样简单,还是有更好的做法?

有没有人有这方面的经验,可以给我一些指示(请不要32位)

谢谢,

汤姆

有帮助吗?

解决方案

它与WSGI或php或任何其他特定的Web技术无关。考虑

<img src="someScript.php?param1=xyz">

一般来说,对于url someScript.php?param1 = xyz 服务器应该返回图像类型的数据,它会起作用

考虑这个例子:

from wsgiref.simple_server import make_server

def serveImage(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'image/png')]
    start_response(status, headers)

    return open("about.png", "rb").read()

httpd = make_server('', 8000, serveImage)
httpd.serve_forever()

此处任何指向serveImage的网址都会返回有效图片,您可以在任何 img 标记或任何其他可以使用图片的标记位置使用它。 css或背景图片

可以使用许多第三方库动态生成图像数据,例如PIL等 例如,参见使用python成像库动态生成图像的示例 http://lost-theory.org/python/dynamicimg.html

其他提示

YES。它就像在网页中放置网址一样简单。

<img src="url_to_my_application">

你的应用程序只需要使用正确的mimetype返回它,就像在PHP或其他任何东西上一样。最简单的例子:

def application(environ, start_response):
    data = open('test.jpg', 'rb').read() # simulate entire image on memory
    start_response('200 OK', [('content-type': 'image/jpeg'), 
                              ('content-length', str(len(data)))])
    return [data]

当然,如果您使用框架/帮助程序库,它可能具有帮助您更容易的辅助函数。

我想补充说,多线程功能在Web服务器上并不是典型的。如果操作正确,则不需要线程就能获得良好的性能。

如果你有一个完善的事件循环,可以在不同的请求之间切换,并以无线程友好的方式编写你的请求处理代码(通过尽可能频繁地将控制权返回给服务器),你甚至可以得到比使用线程更好的性能,因为它们不会使任何运行更快并增加开销。

请参阅 twisted.web ,了解不使用线程的优秀python Web服务器实现

有关使用此技术的精彩示例,请参阅 BNF铁路 图WHIFF迷你演示。您可以从WHIFF wsgi工具包下载获取源代码。

您应该考虑使用并注意ETag标头。这是一个CGI脚本,而不是WSGI,但这些想法是可以翻译的: sparklines来源 - 它碰巧总是为相同的参数返回相同的图像,所以它实现了极端的缓存。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top