将Base64转换为普通PNG进行复制/粘贴

时间:2012-01-26 20:11:54

标签: outlook png base64 highcharts paste

我有一个HTML电子邮件模板,使用如下的kludgy流程:

  1. 从MySQL中提取数据并将其放入HighCharts图表
  2. 使用canvg
  3. 将HighCharts SVG转换为画布
  4. 使用canvas.toDataURL
  5. 将画布渲染为Base64 PNG

    一切都很好,图像显示正常(除了Internet Explorer中的一些怪癖),但这就是问题:

    我希望用户能够将整个网页复制并粘贴到Outlook中,然后将其作为电子邮件发送出去。但是,Outlook(以及我尝试过的其他一些客户)无法通过复制粘贴接收Base64 PNG - 图像应该是一个空白区域。

    有没有人知道将Base64转换为普通PNG的方法,以便它能够在复制/粘贴后继续存在?也许这需要将PNG保存到服务器?

1 个答案:

答案 0 :(得分:1)

自从你上一个问题以来,我一直在考虑这个问题,我提出了3个选项:

<强>一

  1. 坚持你所拥有的。
  2. 从toDataURL获取base64字符串,通过AJAX将其提交回服务器,在后端将其转换为PNG,将其存储在服务器上并将PNG提供给页面。
  3. <强>两个

    1. 在用户浏览器上渲染highcharts SVG。
    2. 通过AJAX调用将SVG字符串提交给后端服务器。
    3. 在后端,生成一个帖子请求(something like described here see Using PHP for POST Request)到http://export.highcharts.com/的highcharts导出服务器。通过查看highcharts source,请求需要包含以下发布的变量:

        

      filename:png filename
         type:from plotOptions,type,line,bar等。
         width:所需png的宽度(以像素为单位)    svg:svg字符串

    4. 获取生成的PNG,将其保存到您的服务器,正常提供。

    5. <强>三

      切换到使用Java Highcharts API。您必须在服务器上运行此功能。但是,一旦你这样做,你就可以完全在后端生成你的图表并只提供PNG文件。