我们正在构建一个需要大量图像处理的基于Web的应用程序。我们希望这个处理负载尽可能地在客户端上,我们希望尽可能多地支持平台(甚至是移动设备)。
是的,我知道,一厢情愿
以下是信息:
图像处理是来自某些数据的光栅化。想像从PDF文件创建PNG图像。
我们没有很多服务器电源。所以客户端处理是必须的。
所以,我们正在考虑:
Flash - 最普遍,但从我读到的开发工具乏善可陈。 (目前还没有iPhone / iPad支持)。
Silverlight - 允许我们使用.NET CLR,所以一个大的++(很多代码都在.NET中)。但大多数手机都不支持(未来传闻的Android支持)
HTML5 + Javascript - 可能是最“便携”的选项。问题是必须在Javascript中重写所有图像处理代码。
任何可能有帮助的想法或架构? 澄清:我不需要进一步了解哪些库可用于Silverlight和Javascript。我的困境是
我可能会遗漏任何开箱即用或明智的想法/替代方案?
答案 0 :(得分:28)
这是软件架构师一直遇到的问题。按照惯例,没有理想的解决方案。您需要选择最适合您业务的折衷方案。
总结一下您的问题,您的大多数图像处理软件都是用.NET编写的。您希望在移动设备上运行客户端,但移动设备上的.NET渗透率有限。具有更高渗透率的替代方案(例如Flash)将要求您重新编写代码,这是您无法承担的。此外,iPhone / iPad不支持这些替代方案。
您理想的是在大多数现有平台(包括iPhone / iPad)上运行所有.NET代码的方法。我可以肯定地说,目前还没有这样的解决方案 - 没有你忽略的“银弹”答案。
那么您需要妥协什么呢?在我看来,即使你在闪存中重新开发,你仍然会错过一个主要市场(iPhone)。无论如何,重新开发软件的成本非常高。
这是解决您问题的最佳方案 - 您需要在“客户端执行”约束上妥协。如果您执行服务器端,则可以保留现有代码,并且还可以部署到几乎所有移动客户端,包括iPhone。
您说您的服务器功率有限,但与软件开发成本相比,服务器处理能力较低。实际上,将服务器组件外包并且仅为您使用的内容付费并不是那么昂贵。最有可能的是,您的应用程序只有较低的渗透率才能开始。随着业务的增长,您将能够负担得起升级服务器容量。
我相信这是解决问题的最佳方法。
答案 1 :(得分:7)
在Amazon E2C,Azure或Google上托管您的图像处理。 IIRC E2C已经打包了许多常见的图像处理问题,并且随时可以使用。
Azure在将代码共享为Web服务方面可能更为熟悉
您只需支付CPU周期和转移/存储等费用
答案 2 :(得分:4)
我确信会有Silverlight和JS人员发布示例。以下是一些用actionscript编写的图像编辑器:
首先要ImageProcessing library。 加上PixelBender在Flash Player 10中可用,速度很快,它在一个单独的线程中运行 和people做了一些相当疯狂的事情。
HTH
答案 3 :(得分:4)
Silverlight部分的一些帮助:
有一个名为Thumba的Silverlight图像编辑器。 Nokola最近制作了一个名为EasyPainter的人,他还将提供源代码。
对于图像转换,我建议使用包含一些基本效果的开源库ImageTools。 Silverlight有一个名为WriteableBitmap的位图像素处理类。开源库WriteableBitmapEx是Silverlight的WriteableBitmap的扩展方法的集合。 WriteableBitmap API非常简约,只有原始像素数组才能进行此类操作。 WriteableBitmapEx试图通过扩展方法来补偿它,这些方法像内置方法一样易于使用。 像素着色器还可用于制作一些快速和高级效果。虽然它们受Shader Model 2限制,但着色器可用于快速模糊,着色等。
答案 4 :(得分:3)
免责声明:我认为自己是Flash平台的拥护者。我很欣赏Silverlight作为一种通过浏览器部署几乎所有.NET内容的技术的巨大潜力,但它具有低渗透率,可怕的市场营销,并且很多人(大多数不知道Flash或Silverlight的人)都认为 - 不是Flash的竞争对手,因为Flash不是Sliverlight的竞争对手。我的理想主义者喜欢使用标准在HTML + JS中做所有事情,而不是依赖第三方专有软件。但事实是,JS很慢,API也很有限,JS,HTML和CSS的实现在浏览器中非常不一致。
如果您真的想坚持使用.NET,并且非常有兴趣定位iPhone及其兄弟姐妹,那么您可能需要查看MonoTouch。
尽管如此,即使这可能让您大吃一惊,我还是会告诉您使用Flash。 :)
为什么呢?图像处理位是应用程序的最小部分。无论你在写什么,我都非常肯定。我不知道Silverlight,但在Flash中,“Thumba”和“EasyPainter”使用的过滤器可以在一天内创建,其中大多数只使用ConvolutionFilter,ColorMatrixFilter,{{3} }和DisplacementMapFilter甚至只需应用其中一个BitmapData::paletteMap。使用PixelBender可以创建任何其他内容,George指出了这一点。内核语言是C的子集,因此移植经典过滤器不应该太耗时。另外other filters Flash offers out of the box(一个针对Flash Player 10的LLVM后端)将是一个值得研究的选项,尽管它还不是很稳定。
你的应用程序的最大部分将是很多GUI设计,GUI实现,商业逻辑等。当涉及到简单但相当快速的图像处理时,Flash非常棒,而且Flex框架和MXML具有强大的功能工具,可以高效地创建应用程序的GUI,可以与几乎任何平台的多种服务器解决方案很好地互操作。
此外,Flash拥有一个强大而活跃的社区,提供大量的教程,代码片段,库和框架,以及一个庞大的生态系统,使用交叉编译工具将Flash内容提供给其他平台(包括即将到来的{{3} },或提到的Elips)。我不明白,你得到的印象是,Flash平台缺乏开发工具。 .NET套件的不同之处在于它们是由众多供应商提供的。乔治已经指出即将推出的Flash Player 10.1,但我想强调的是,这使得许多跨平台的考虑因素过时了。
最后但同样重要的是,我想指出alchemy。它允许使用Flash CS5提供的相同API到Haxe编译为SWF,也允许编译为C ++。还有一个Android后端的工作正在进行中。如果你不打算在接下来的4-5个月内推出,那么这绝对是一个选择。
答案 5 :(得分:3)
您的问题是Haxe编程语言的完美目标。 Haxe是为Web编写的,可以编译为JavaScript,Flash和Objective-C(很快可能是Java / .NET)。 因此,您不会选择要投资的平台,而是使用哪种语言。 Haxe很容易被AcitonScript程序员采用。
当Flash可用时,在JavaScript沙箱中运行图像处理算法是没有意义的,因为它会更快。使用JavaScript在iPhone等移动设备上运行繁重的图像处理算法也没有意义。我只支持JavaScript作为最糟糕的后备解决方案。
如果你不喜欢使用Haxe,我会使用Flash。如果这是您的问题,您可以为iPhone部署Flash应用程序。这也非常好,因为您获得了本机ARM代码。实际上有很多专业Flash开发工具可用。 FDT和IntelliJ IDEA是其中两个。在撰写本文时,最好的Haxe IDE可能是FlashDevelop。
所以我绝对不会使用JavaScript作为唯一的解决方案。 Haxe非常适合您尝试实现的目标。如果您不信任或不想投资Haxe,则可以使用Flash,因为iPhone/iPad export。
根据您的使用情况,我还建议您查看Amazon EC2和Google AppEngine等云托管。托管成本很便宜,并且您的任务可以轻松扩展。对于在桌面系统上花费大量时间的复杂操作,体验会更好。
答案 6 :(得分:2)
除了其他答案,另一种选择可能是混合解决方案。例如,对大多数目标受众使用Flash / Silverlight,对不支持它的用户使用服务器端处理(或者您可以为iP [hone | ad]创建本机应用程序)
你可能不得不做这样的事情,因为你所针对的手机可能没有足够的处理能力,这取决于你的图像处理有多复杂。
当然,您仍然可以选择升级您的服务器,虽然您目前已经打折,但可能比花费开发时间创建/部署/测试客户端解决方案{/ 3}}。
答案 7 :(得分:2)
您可以将Silverlight用于所有启用Silverlight的客户端,对于非Silverlight客户端,请执行图像处理服务器端。由于Silverlight代码是C#,您可以对其进行双重编译以使(大部分)代码与Silverlight和非Silverlight(即服务器)相同。这将为您带来两全其美。
答案 8 :(得分:1)
你没有说你需要重写的“所有代码”是什么语言。对Javascript的半自动翻译是否可行?
也许你可以像CraigS建议的那样从服务器端开始,然后随着时间的推移将功能移到客户端而不是一次性重写所有内容。
答案 9 :(得分:1)
答案 10 :(得分:0)
最好的解决方案是使用silverlight(因此您已准备好代码)。如果客户端无法运行它(手机等),则在服务器端处理它。
这是最好的妥协。
答案 11 :(得分:0)
取决于您要定位的图像处理类型和最终用户体验。
当您希望定位移动电话时,您的图像处理需要考虑用户或收件人的手机类型(如果通过短信/彩信发送),因为不同的手机具有不同的分辨率屏幕并处理不同的图像主图像和缩略图的格式。
我建议您考虑今年Microsoft PDC主题演讲中提到的混合云架构。这将使您拥有自己的服务器来支持您的应用程序,但如果您需要额外的容量,则需要使用AppFabric扩展到云中。
此外,为了最大限度地提高产品的市场可用性,将图像处理功能扩展到通用的可重用基础架构,您可以针对不同的平台,利用每个平台的积极因素。
我致力于一个托管其图像处理和交付基础架构服务器端的解决方案,然后构建了不同的UI产品,允许通过桌面,MNO和AppStore进行销售。它可以起作用,从商业角度来看,可以提供规模经济效益。
答案 12 :(得分:0)
为什么不提Java Applet?
好的方面是:
几乎所有浏览器支持? 需要安装JRE吗? 所有OS支持 Java提供Java高级映像工具包,但是如果可以调用c ++ dll,那就最好了(JNI可以调用c ++ dll)
答案 13 :(得分:-1)
我看到它的方式,没有一种解决方案可以满足您的所有需求。你最好的选择,imo,是与Flash一起使用,希望Adobe与Apple达成协议,在iPhone / iPad上安装Flash。当然,主要的缺点是你必须重写大部分代码。
如果移动部门不是绝对关键,那么请选择Silverlight选项,原因就在于您提到的原因。您还可以在浏览器外模式下使用Silverlight作为桌面应用程序。