spark_prによって生成されたコントローラーのメモリに png ファイルがある Rails アプリがあります。
@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
app/views/users/show.html.erb である私のビューでこの png ファイルをレンダリングしたいと思います。これには、@user のさまざまな属性を表示する Rails scaffold ジェネレーターによって生成された標準的なものが含まれています。
ビューでこのメモリ内ファイル (@pngfile) をレンダリングするにはどうすればよいですか? 私はファイルを保存したくありませんし、そのファイルの一時的な URL を提供することさえしたくありません。バイナリ blob からレンダリングされたインライン アイコンを含む HTML ページでこれが行われるのを見たので、それが可能であることはわかっています。しかし、これを可能にする Rails ビュー ヘルパーの魔法の呪文を理解できませんでした。
----------- 編集: 詳細情報 --------------------------
このサイトでは、URL を埋め込む方法について詳しく説明しています。フォルダ アイコンのコードは次のようになります。
<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,"+@pngfile %>
<%=image_tag "data://image/png;base64,"+@pngfile %>
<img src=<%="data:image/png;base64,"+@pngfile %> ></img>
<img src=<%=raw("data:image/png;base64,"+@pngfile) %> ></img>
2 つ目以外はすべて失敗し、Chrome と Firefox では機能しましたが、IE9 では機能しませんでした。最初のものは機能するはずでしたが、image_tag ヘルパーのコードは、たとえそれが即時データ URL であっても、デフォルトで URL の前に「/images/」を追加します。別のタブで画像を表示しようとして失敗したため、これを知っています。しかし、「/images/」の部分を取り除いたところ、うまくいきました。2番目のものが機能した理由はわかりません。気まぐれでやってみただけです。3 つ目は、文字列の一部が特殊文字のために壊れているように見えたため、失敗しました。4 つ目で生の文字列を使用してみましたが、どちらも機能しませんでした。
この時点で、私は困惑しています。image_tag にモンキー パッチを適用して、データの先頭に何かを追加しないようにしますか: 埋め込み画像の URL、またはビューの例 3 または 4 のように適切にレンダリングされるように、文字列で何かファンキーなことを行いますか?