我有一个Rails应用程序,在控制器的内存中有一个png文件,由spark_pr生成。Rails3:在视图中渲染内存中的图像
@pngfile << Spark.plot([47, 43, 24, 47, 16, 28, 38, 57, 50, 76, 42, 20, 98, 34, 53, 1, 55, 74, 63, 38, 31, 98, 89], :has_min => true, :has_max => true, 'has_last' => 'true', 'height' => '40', :step => 10, :normalize => 'logarithmic')
@user=User.all.first
我想呈现在我看来,这是应用程序/视图/用户/ show.html.erb这个png文件,并且它具有由Rails的脚手架发电机在此它显示各种属性所产生的标准的东西@user。
如何在我的视图中渲染这个内存文件(@pngfile)?我不想保存该文件,也不想为该文件提供临时URL。我已经在HTML页面上看到了这一点,它使用二进制blob呈现的内嵌图标,所以我知道这是可能的。但我无法弄清楚使用Rails视图助手的魔术咒语,这使得这成为可能。
-----------编辑:更多信息-------------------------
This site给有关如何嵌入网址的更多信息。文件夹图标的代码如下所示:
<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7"
width="16" height="14" alt="embedded folder icon">
我在我的视图中嵌入了此确切代码,它适用于Chrome,Firefox和IE9。
所以我试图用我的火花情节。
在我的Rails控制器,我这样做:
@pngfile = Base64.encode64 Spark.plot([47, 43, 24, 47, 16, 28, 38, 57, 50, 76, 42, 20, 98, 34, 53, 1, 55, 74, 63, 38, 31, 98, 89], :has_min => true, :has_max => true, 'has_last' => 'true', 'height' => '40', :step => 10, :normalize => 'logarithmic')
在我看来,我尝试了一些不同的技巧
<%=image_tag "data:image/png;base64,"[email protected] %>
<%=image_tag "data://image/png;base64,"[email protected] %>
<img src=<%="data:image/png;base64,"[email protected] %> ></img>
<img src=<%=raw("data:image/png;base64,"[email protected]) %> ></img>
都失败了,除了第二个,它在Chrome工作, Firefox,但不是IE9。 第一个应该可以工作,但是image_tag帮助程序的代码默认预设为“/ images /”,即使它是立即数据URL。我知道这是因为我试图在不同的选项卡中查看图像,并且失败了。但是当我剥离“/ images /”部分时,它运行良好。 我不知道为什么第二个人工作。我只是随心所欲地尝试了它。 第三个失败,因为它看起来像字符串的部分由于特殊字符被分解。我尝试在第四个使用原始字符串,但它也没有工作。
在这一点上,我很难过。我是否尝试猴子补丁image_tag,以便它不预先填充数据的内容:用于嵌入图像的URL,还是我会对字符串做一些时髦的事情,以便像视图示例3或4一样正确渲染它?