当前位置: 首页 > 面试题库 >

使用python动态将matplotlib图像提供给网络

梁丘威
2023-03-14
问题内容

在这里以类似的方式提出了这个问题,但是答案却是我的头(我是python和Web开发的新手),所以我希望有一个更简单的方法,或者可以用不同的方式解释它。

我正在尝试使用matplotlib生成图像并将其提供服务,而无需先将文件写入服务器。我的代码可能有点傻,但是它像这样:

import cgi
import matplotlib.pyplot as pyplot
import cStringIO #I think I will need this but not sure how to use

...a bunch of matplotlib stuff happens....
pyplot.savefig('test.png')

print "Content-type: text/html\n"
print """<html><body>
...a bunch of text and html here...
<img src="test.png"></img>
...more text and html...
</body></html>
"""

我认为不应该执行pyplot.savefig(’test.png’),而是创建一个cstringIO对象,然后执行以下操作:

mybuffer=cStringIO.StringIO()
pyplot.savefig(mybuffer, format="png")

但是我从那里迷路了。我看到的所有示例(例如http://lost-
theory.org/python/dynamicimg.html
)都涉及类似的操作

print "Content-type: image/png\n"

而且我不知道如何将其与我已经输出的HTML集成在一起。


问题答案:

你应该

  • 首先写入cStringIO对象
  • 然后写HTTP头
  • 然后将cStringIO的内容写入stdout

因此,如果发生错误savefig,您仍然可以返回其他内容,甚至另一个标头。有些错误不会更早地识别出来,例如文本问题,图像尺寸太大等。

您需要告诉savefig将输出写入何处。你可以做:

format = "png"
sio = cStringIO.StringIO()
pyplot.savefig(sio, format=format)
print "Content-Type: image/%s\n" % format
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) # Needed this on windows, IIS
sys.stdout.write(sio.getvalue())

如果要将图像嵌入HTML:

print "Content-Type: text/html\n"
print """<html><body>
...a bunch of text and html here...
<img src="data:image/png;base64,%s"/>
...more text and html...
</body></html>""" % sio.getvalue().encode("base64").strip()


 类似资料:
  • 我在webpack和react服务器上提供静态图像时遇到问题。 这是我当前的文件夹结构 正如你所看到的,我有一个资产文件夹,它保存着我所有的图片,这是我的网页输入和输出配置 其中client条目是我的react项目client_条目的源:path.join(process.cwd(),'src/client/index.jsx') 这里是我试图从项目根目录下的assets文件夹加载图像的地方 只有

  • 问题内容: 我正在用Python开发一个应用程序,该应用程序从串行端口收集数据并针对到达时间绘制收集的数据图。数据的到达时间不确定。我希望在收到数据时更新绘图。我搜索了如何执行此操作,发现了两种方法: 清除绘图,然后重新绘制所有点的绘图。 通过在特定间隔后对其进行更改来对图进行动画处理。 我不喜欢第一个程序,因为该程序会运行很长时间(例如一天),并且会收集数据,因此重新绘制绘图会非常缓慢。第二种方

  • 问题内容: 我正在尝试使用 matplotlib.pyplot.imshow() 显示灰度图像。我的问题是灰度图像显示为颜色图。我需要灰度,因为我想在图像上绘制颜色。 我读入图像并使用 PIL的Image.open()。convert(“ L”)* 转换为灰度 * 然后,我将图像转换为矩阵,以便可以轻松地使用 但是,当我这样做 它使用颜色图显示图像(即不是灰度)。 我在这里做错了什么? 问题答案:

  • 我想读取数据并绘制动态图,所以我学习了使用PyQt5的matplotlib。我找到了一个例子,但它是针对PyQt4的。我将其修改为PyQt5,但它有一些问题,当我单击开始按钮时,它显示错误 回溯(最后一次调用):文件“/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site packages/matplotlib/ba

  • 问题内容: 网络搜索变成了几个简单的(无证)的例子(和良好的答案在这里约)如何动态服务使用瓶Matplotlib数字; 但是这些功能的特点以及它们之间的差异使我感到困惑。 一些使用低级IO并返回元组 而其他几个 使用不同的IO API并返回一个Response 而其他人则采用不同的方法来编码和构建返回值 所有这些似乎都有效。但是我想知道它们是否共享这些方法的功能,或者它们之间的差异具有非显而易见的

  • 我有一个图像,我想创建一个按钮点击一样的效果-当按钮被触摸时,它应该改变颜色一个瞬间。