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