簡體   English   中英

客戶端圖像處理

[英]Client-side image processing

我們正在構建一個需要大量圖像處理的基於Web的應用程序。 我們希望這個處理負載盡可能地在客戶端上,我們希望盡可能多地支持平台(甚至是移動設備)。

是的,我知道, 一廂情願

這是信息:

  1. 圖像處理是來自某些數據的光柵化。 想像從PDF文件創建PNG圖像。

  2. 我們沒有很多服務器電源。 所以客戶端處理是必須的。

所以,我們正在考慮:

  1. Flash - 最普遍,但從我讀到的開發工具乏善可陳。 (目前還沒有iPhone / iPad支持)。

  2. Silverlight - 允許我們使用.NET CLR,因此是一個很大的++(很多代碼都在.NET中)。 但大多數手機都不支持(未來傳聞的Android支持)

  3. HTML5 + Javascript - 可能是最“便攜”的選項。 問題是必須在Javascript中重寫所有圖像處理代碼。

任何可能有幫助的想法或架構? 澄清:我不需要進一步了解哪些庫可用於Silverlight和Javascript。 我的困境是

  • 選擇Silverlight意味着不支持大多數手機
  • 選擇Flash意味着我們必須重新開發大部分代碼而不支持iPhone / iPad
  • HTML5 + Javascript我們必須重新開發大部分代碼,並且尚未在所有瀏覽器中完全支持
  • 選擇兩個(Silverlight + Flash)將太昂貴

我可能會缺少任何開箱即用或明智的想法/替代方案?

這是軟件架構師一直遇到的問題。 按照慣例,沒有理想的解決方案。 您需要選擇最適合您業務的折衷方案。

總結一下您的問題,您的大多數圖像處理軟件都是用.NET編寫的。 您希望在移動設備上運行客戶端,但移動設備上的.NET滲透率有限。 具有更高滲透率的替代方案(例如Flash)將要求您重新編寫代碼,這是您無法承擔的。 此外,iPhone / iPad不支持這些替代方案。

您理想的是在大多數現有平台(包括iPhone / iPad)上運行所有.NET代碼的方法。 我可以肯定地說,目前還沒有這樣的解決方案 - 沒有你忽略的“銀彈”答案。

那你需要妥協什么? 在我看來,即使你在閃存中重新開發,你仍然會錯過一個主要市場(iPhone)。 無論如何,重新開發軟件的成本非常高。

這是您問題的最佳解決方案 - 您需要在“客戶端執行”約束上妥協。 如果您執行服務器端,則可以保留現有代碼,並且還可以部署到幾乎所有移動客戶端,包括iPhone。

您說您的服務器功率有限,但與軟件開發成本相比,服務器處理能力便宜。 實際上,將服務器組件外包並且僅為您使用的內容付費並不是那么昂貴。 最有可能的是,您的應用程序只有較低的滲透率才能開始。 隨着業務的增長,您將能夠負擔得起升級服務器容量。

我相信這是解決您問題的最佳方案。

在Amazon E2C,Azure或Google上托管您的圖像處理。 IIRC E2C已經打包了許多常見的圖像處理問題,並且隨時可以使用。

在將代碼共享為Web服務方面,Azure可能更為熟悉

您只需支付CPU周期和傳輸/存儲等費用

我相信會有Silverlight和JS人員發布示例。 以下是一些用actionscript編寫的圖像編輯器:

  1. 鳳凰
  2. PhotoshopExpress

有一個ImageProcessing庫可以開始。 另外PixelBender在Flash Player 10中可用,速度很快,它在一個單獨的線程中運行, 人們用它做了一些相當瘋狂的事情。

HTH

Silverlight部分的一些幫助:

有一個名為Thumba的Silverlight圖像編輯器。 Nokola最近制作了一款名為EasyPainter的產品 ,他還將提供源代碼。

對於圖像轉換,我會推薦開源庫ImageTools ,它還包括一些基本效果。 Silverlight有一個名為WriteableBitmap的位圖像素處理類。 開源庫WriteableBitmapEx是Silverlight的WriteableBitmap的擴展方法的集合。 WriteableBitmap API非常簡約,只有原始像素數組才能進行此類操作。 WriteableBitmapEx試圖通過擴展方法來補償它,這些方法像內置方法一樣易於使用。 像素着色器還可用於制作一些快速和高級效果。 雖然它們受Shader Model 2限制,但着色器可用於快速模糊,着色等。

免責聲明:我認為自己是Flash平台的擁護者。 我很欣賞Silverlight作為一種通過瀏覽器部署幾乎所有.NET內容的技術的巨大潛力,但它具有低滲透率,可怕的市場營銷,並且很多人(大多數不知道Flash或Silverlight的人)都認為 - 不是Flash的競爭對手,因為Flash不是Sliverlight的競爭對手。 我的理想主義者喜歡使用標准在HTML + JS中做所有事情,而不是依賴第三方專有軟件。 但事實是,JS很慢且API有限,並且JS,HTML和CSS的實現在瀏覽器中非常不一致。

如果你真的想堅持使用.NET並且對iPhone及其兄弟姐妹的目標感興趣,那么你可能想看看MonoTouch

盡管如此,即使這可能讓您大吃一驚,我還是會告訴您使用Flash。 :)

為什么? 圖像處理位是應用程序的最小部分。 無論你在寫什么,我都非常肯定。 我不知道Silverlight,但在Flash中,“Thumba”和“EasyPainter”使用的過濾器可以在一天內創建,大多數只使用ConvolutionFilterColorMatrixFilterDisplacementMapFilterBitmapData :: paletteMap ,甚至只需應用一個Flash提供其他過濾器開箱即用 使用PixelBender可以創建任何其他內容,George指出了這一點。 內核語言是C的子集,因此移植經典過濾器不應該太耗時。 此外, alchemy (一個針對Flash Player 10的LLVM后端)將是一個值得研究的選項,盡管它還不是很穩定。

您的應用程序的最大部分將是大量的GUI設計,GUI實現,業務邏輯等。當涉及到簡單但相當快速的圖像處理時,Flash非常棒。使用Flex框架和MXML,您可以高效地使用它創建應用程序的GUI,可以與幾乎任何平台的多種服務器解決方案很好地互操作。

此外,Flash擁有一個強大而活躍的社區,提供大量的教程,代碼片段,庫和框架,以及一個龐大的生態系統,使用交叉編譯工具將Flash內容提供給其他平台(包括即將推出的Flash CS5 ,或者提到的Elips )。 我不明白,你得到的印象是,Flash平台缺乏開發工具。 .NET套件的不同之處在於它們是由眾多供應商提供的。 喬治已經指出即將推出的Flash Player 10.1,但我想強調的是,這使得許多跨平台的考慮因素過時了。

最后但同樣重要的是,我想指出Haxe 它允許編譯為SWF,但也允許使用NME提供的相同API編譯目標iPhone 還有一個Android后端的工作正在進行中。 如果你不打算在接下來的4-5個月內推出,那么這絕對是一個選擇。

您的問題是Haxe編程語言的完美目標。 Haxe是為Web編寫的,可以編譯為JavaScript,Flash和Objective-C(很快可能是Java / .NET)。 因此,您不會選擇要投資的平台,而是使用哪種語言。 Haxe很容易被AcitonScript程序員采用。

當Flash可用時,在JavaScript沙箱中運行圖像處理算法是沒有意義的,因為它會更快。 使用JavaScript在iPhone等移動設備上運行繁重的圖像處理算法也沒有意義。 我只支持JavaScript作為最差的后備解決方案。

如果你不喜歡使用Haxe,我會使用Flash。 如果這是您的問題,您可以為iPhone部署Flash應用程序。 這也非常好,因為您獲得了本機ARM代碼。 實際上有很多專業Flash開發工具可用。 FDTIntelliJ IDEA是其中兩個。 在寫作的那一刻,最好的Haxe IDE可能就是FlashDevelop

所以我絕對不會使用JavaScript作為唯一的解決方案。 Haxe非常適合您嘗試實現的目標。 如果您不信任或不想投資Haxe,您可以使用Flash,因為iPhone / iPad導出

根據您的用例,我還鼓勵您查看Amazon EC2和Google AppEngine等雲托管。 托管成本很便宜,並且您的任務可以輕松擴展。 當涉及復雜的操作時,體驗會更好,這可能會花費很多時間在桌面系統上。

除了其他答案,另一種選擇可能是混合解決方案。 例如,對大多數目標受眾使用Flash / Silverlight,對不支持它的用戶使用服務器端處理(或者您可以為iP [hone | ad]創建本機應用程序)

你可能不得不做這樣的事情,因為你所針對的手機可能沒有足夠的處理能力,這取決於你的圖像處理有多復雜。

當然,您仍然可以選擇升級您的服務器,雖然您目前已經打折,但可能比花費開發時間創建/部署/測試客戶端解決方案要便宜得多。

您可以將Silverlight用於所有啟用Silverlight的客戶端,對於非Silverlight客戶端,可以使用圖像處理服務器端。 由於Silverlight代碼是C#,您可以對其進行雙重編譯以使(大部分)代碼與Silverlight和非Silverlight(即服務器)相同。 這將為您帶來兩全其美。

你沒有說你需要重寫的“所有代碼”是什么語言。對Javascript的半自動翻譯是否可行?

也許你可以像CraigS建議的那樣從服務器端開始,然后隨着時間的推移將功能移到客戶端而不是一次性重寫所有功能。

你檢查過Pixlr.com編輯嗎?
看看他們的API也是..

最好的解決方案是使用silverlight(因此您已准備好代碼)。 如果客戶端無法運行它(手機等),則在服務器端處理它。

這是最好的折衷方案。

取決於您要定位的圖像處理類型和最終用戶體驗。

當您希望定位移動電話時,您的圖像處理需要考慮用戶或收件人的手機類型(如果通過短信/彩信發送),因為不同的手機具有不同的分辨率屏幕並處理不同的主要圖像格式圖像和縮略圖。

我建議你考慮今年微軟PDC主題演講中提到的混合雲架構。 這將使您擁有自己的服務器來支持您的應用程序,但如果您需要額外的容量,則可以使用AppFabric擴展到雲端。

此外,為了最大限度地提高產品的市場可用性,將圖像處理功能擴展到通用的可重用基礎架構,您可以針對不同的平台,利用每個平台的積極因素。

我曾致力於一個托管其圖像處理和交付基礎設施服務器端的解決方案,然后構建了不同的UI產品,允許通過桌面,MNO和AppStore進行銷售。 它可以工作,從商業角度來看,可以提供規模經濟效益。

為什么不提Java Applet?

好的方面是:

幾乎所有瀏覽器支持? 需要安裝JRE嗎? 所有操作系統支持Java提供Java高級映像工具包,但如果可以調用c ++ dll,那就最好(JNI可以調用c ++ dll)

我認為,沒有一種解決方案可以滿足您的所有需求。 你最好的選擇,imo,是與Flash一起使用,希望Adobe與Apple達成協議,在iPhone / iPad上安裝Flash。 當然,主要的缺點是你必須重寫大部分代碼。

如果移動扇區不是絕對關鍵,那么請選擇Silverlight選項,原因就在於您提到的原因。 您還可以在瀏覽器外模式下使用Silverlight作為桌面應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM