我正在編寫一個應用程序,讓用戶使用Raphael.JS生成圖像。我想要的一個輔助功能是生成Raphael畫布的PNG。以編程方式從Raphael.JS生成PNG圖像
這裏是在我的頭上一般管道:
- 用戶輸入的參數
- 我們產生JS與拉斐爾呼籲
- 我們生成一個JS包裝,做上述幷包含div調用.innerHTML ,讓我們SVG(我們然後發送某處)
- 我們執行JS包裝
- 的SVG發送到ImageMagick的,突然迸出一個PNG
第4步是我需要一些指導的步驟。用戶可能正在使用IE;我們無法保證JS曾經在SVG瀏覽器中執行過。無論如何,我們需要這個來運行服務器端,因爲它是可靠的。所以這裏有三種可能性到目前爲止:
- 在服務器上安裝Firefox並在Firefox中運行(3)的結果。這個選項很糟糕,因爲安裝FF意味着在我們的服務器上安裝一堆X的東西,運行FF會帶來很多開銷,而且我並不真正想跟蹤過程並在完成後將其殺死。
- 使用Node.js + jsdom(http://github.com/tmpvar/jsdom)。這裏的缺點是不清楚jsdom是如何支持的 - 據稱的網站jsdom.org並不存在。另外,我找不到任何文檔。
- 也許對犀牛做些什麼?據我所知,Rhino比Node更有價值的DOM支持。
所以...所有這三種選項都很吸引人。我認爲。我錯了什麼?有另一種方法嗎?
很酷...謝謝。這可能實際上是有效的 - 儘管我的Spidey感覺在依賴用戶的瀏覽器輸出的想法中感到刺痛。我無法指責風險,但依靠那種跑步的客戶端讓我感到困惑。你怎麼看 - 我只是偏執狂?沒有辦法讓用戶創建一個Raphael圖片而不加載它所呈現的頁面,而且我認爲我們希望我們的用戶使用JS ... – rfrankel 2010-07-30 04:13:32
@rfrankel您當然可以永遠不會相信瀏覽器的輸入並且總會有可能的利用(例如在XSLT引擎中),即使輸入格式良好,但我應該認爲驗證您的輸入實際上是SVG是一個好的開始。 – robertc 2010-07-30 09:59:40
當然 - 我甚至沒有真正考慮安全風險(我知道該如何處理),以至於我們成功創建Raphael圖像而不是PNG的邊緣情況,因爲用戶的瀏覽器做了一些奇怪或崩潰的事情管他呢。 – rfrankel 2010-08-01 09:25:37