在页面上将 Highcharts 画布渲染为 PNG
我正在使用 HighCharts 库生成一些动态图表。但是,我想将 HighCharts 画布元素渲染为 PNG 图像,以便用户可以将图表复制并粘贴到电子邮件等中,而无需使用导出功能。
具体来说,我正在尝试创建一个包含图表的 HTML 电子邮件模板,并希望用户能够选择所有 > >复制/粘贴到他们的电子邮件客户端而不是复制/粘贴,导出图像,然后找到将其插入电子邮件中的方法。
我发现了这个: Capture HTML Canvas as gif/jpg/png/ pdf?,但代码似乎没有将图像渲染到文档中。
I'm using the HighCharts library to generate some dynamic charts. However, I'd like to render the HighCharts canvas element as a PNG image, such that the user can copy and paste the chart into an email, etc. without having to use the exporting function.
Specifically, I'm trying to create an HTML email template that includes the chart, and want the user to be able to select all > copy/paste into their email client instead of copy/pasting, exporting the image, then finding a way to insert it in the email.
I've found this: Capture HTML Canvas as gif/jpg/png/pdf?, but the code doesn't seem to render an image to the document.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您决定使用 HighCharts,这里有一个技巧。它使用 canvg 将 SVG 解析为画布,然后将画布转换为 PNG。
Here's a hack if you have your heart set on using HighCharts. It uses canvg to parse the SVG into a canvas and then converts the canvas to a PNG.
我知道这现在是一个老问题了,但由于它在 Google 搜索结果中对我来说排名第一,我认为值得一提的是 Highcharts 现在 原生支持服务器端图像生成脚本并且效果很好。
I know this is now an old question, but since it came up #1 for me in a Google search result, I think it's worth mentioning that Highcharts now natively supports a server-side image generation script and it works great.
使用来自“在服务器上渲染图表的信息”(来自 jkraybills 答案),我使用Ajax 获取尚未渲染的图表图像,并将其显示在
img
标签中。HTML:
Javascript:
如 这个 JSFiddle 演示 所示。
POST 参数的其余部分(
width
、callback
...)为 文档中。With the information from "Render charts on the server" (from jkraybills answer), I've created this minimal example using a Ajax to get an image of a chart that has not been rendered, and displaying it in an
img
-tag.HTML:
Javascript:
As in this JSFiddle demonstration.
The rest of the POST parameter (
width
,callback
...) are in the documentation.这是一个基于 PhantomJS 的服务器端解决方案。您可以使用 JSONP 对 image.vida.io 进行跨域调用。
http://image.vida.io/
您的图表/可视化需要可以从外部访问。您可以将凭据传递给 URL。
<一href="http://image.vida.io/api/https%3A%2F%2Fvida.io%2Fdocuments%2FWgBMc4zDWF7YpqXGR/viewport_width=980&viewport_height=900&delay=5000&selector=%23canvas ">http://image.vida.io/api/https%3A%2F%2Fvida.io%2Fdocuments%2FWgBMc4zDWF7YpqXGR/viewport_width=980&viewport_height=900&delay=5000&selector=%23canvas
然后您可以使用 img 标签显示图像:
它可以跨浏览器工作。
Here's a server side solution based on PhantomJS. You can use JSONP to make a cross domain call to image.vida.io.
http://image.vida.io/
Your chart/visualization need to be accessible from outside. You can pass credential to the URL.
http://image.vida.io/api/https%3A%2F%2Fvida.io%2Fdocuments%2FWgBMc4zDWF7YpqXGR/viewport_width=980&viewport_height=900&delay=5000&selector=%23canvas
Then you can display image with img tag:
It works across browser.