Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 使用WSGI创建动态图像,不涉及任何文件_Python_Image Processing_Wsgi - Fatal编程技术网

Python 使用WSGI创建动态图像,不涉及任何文件

Python 使用WSGI创建动态图像,不涉及任何文件,python,image-processing,wsgi,Python,Image Processing,Wsgi,我想向我的用户发送动态创建的图像,如图表、图表等。这些图像是“一次性”图像,它们将只发送给一个用户,然后销毁,因此“不涉及任何文件” 我想直接将图像发送给用户,而不首先将其保存在文件系统中。使用PHP,这可以通过将HTML文件中的图像链接到PHP脚本来实现,例如: 编辑:所以我的图像标签: <img src="someScript.php?param1=xyz"> 然后,脚本将正确的标题(filetype=>jpeg等)发送到浏览器,并直接将图像写回客户端,而不将其临时保存到文

我想向我的用户发送动态创建的图像,如图表、图表等。这些图像是“一次性”图像,它们将只发送给一个用户,然后销毁,因此“不涉及任何文件”

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

编辑:所以我的图像标签:

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

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

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

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

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

谢谢


汤姆是的。只需将url放入页面即可

<img src="url_to_my_application">
当然,如果您使用框架/帮助器库,它可能具有帮助器函数,这将使您更容易使用

我想补充一点,多线程功能在web服务器上并不是最基本的。如果操作正确,就不需要线程来获得良好的性能

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


有关不使用线程的良好python web服务器实现,请参阅。

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

<img src="someScript.php?param1=xyz">
在这里,任何指向serveImage的url都将返回一个有效的图像,您可以在任何
img
标记或任何其他可以使用图像的标记位置使用它,例如css或背景图像

可以使用许多第三方库(如PIL等)动态生成图像数据 e、 g参见使用python图像库动态生成图像的示例

有关使用此技术的奇特示例,请参见
. 你可以从WWGI工具包下载得到源代码。

你应该考虑使用和注意ETAG头。这是一个CGI脚本,不是WSGI,但其思想是可翻译的:--它总是为相同的参数返回相同的图像,因此它采用了极端缓存。

非常感谢您的精彩回答,也感谢您提供了有关线程的好信息。我把第一个答案设为正确答案,仅仅是因为他比你快一点,而问题的实际答案几乎相等。但是,把你的答案也当作正确的答案,如果我能设置两个正确的答案,你的答案也会是其中之一:“汤姆:事实上我更快了(我的答案现在说)44分钟前回答说,”他的回答说:“42分钟前回答”,但自从我编辑了我的答案之后,我想它已经列在了名单上。此外,我似乎有更多的信息在一个更小,更清晰的答案。但不管怎样,这是你的决定。
<img src="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()