2015-10-18 26 views
7

來自Rails背景我希望我能渲染一個透明的像素gif。要做到這一點on Rails的,我只是如何在Phoenix中渲染透明GIF像素?

gif_data = "GIF89a\x01\x00\x01\x00\x80\xFF\x00\xC0\xC0\xC0\x00\x00\x00!\xF9\x04\x01\x00\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x01\x012\x00;" 
respond_to do |format| 
    format.gif { render text: gif_data, content_type: "image/gif" } 
end 

希望得到一些更清潔的方式做到這一點比我自己。

回答

6

經過一些Google搜索和學習字符串編碼。我轉換使用Hexate包的實際透明的gif

47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00 FF FF FF 21 F9 04 01 00 00 00 00 2C 00 00 00 00 01 00 01 00 00 02 01 44 00 3B 

的十六進制代碼到這個

<<71, 73, 70, 56, 57, 97, 1, 0, 1, 0, 128, 0, 0, 0, 0, 0, 255, 255, 255, 33, 249, 4, 1, 0, 0, 0, 0, 44, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 1, 68, 0, 59>> 

所以在菲尼克斯控制器使用這個我可以

gif_data = <<71, 73, 70, 56, 57, 97, 1, 0, 1, 0, 128, 0, 0, 0, 0, 0, 255, 255, 255, 33, 249, 4, 1, 0, 0, 0, 0, 44, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 1, 68, 0, 59>> 
conn = put_resp_content_type(conn, "image/gif") 
text conn, gif_data 
+8

代替'文本/ 2',調用'send_resp(conn,200,git_data)'。最後的結果相同,但後者在語義上是正確的。 :) –

+0

我有麻煩測試它。每當針對響應主體的斷言失敗時,它會嘗試將失敗消息打印到終端,但會引發'ArgumentError',因爲'IO.puts'(實際上是內部使用的':io.put_chars')無法處理這種輸入。 –