客户端图像处理

问题描述 投票:32回答:14

我们正在构建一个需要大量图像处理的基于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)将太昂贵

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

html5 flash silverlight image-processing ria
14个回答
28
投票

这是软件架构师一直遇到的问题。按照惯例,没有理想的解决方案。您需要选择最适合您业务的折衷方案。

总结一下您的问题,您的大多数图像处理软件都是用.NET编写的。您希望在移动设备上运行客户端,但移动设备上的.NET渗透率有限。具有更高渗透率的替代方案(例如Flash)将要求您重新编写代码,这是您无法承担的。此外,iPhone / iPad不支持这些替代方案。

您理想的是在大多数现有平台(包括iPhone / iPad)上运行所有.NET代码的方法。我可以肯定地说,目前还没有这样的解决方案 - 没有你忽略的“银弹”答案。

那你需要妥协什么?在我看来,即使你在闪存中重新开发,你仍然会错过一个主要市场(iPhone)。无论如何,重新开发软件的成本非常高。

这是您问题的最佳解决方案 - 您需要在“客户端执行”约束上妥协。如果您执行服务器端,则可以保留现有代码,并且还可以部署到几乎所有移动客户端,包括iPhone。

您说您的服务器功率有限,但与软件开发成本相比,服务器处理能力便宜。实际上,将服务器组件外包并且仅为您使用的内容付费并不是那么昂贵。最有可能的是,您的应用程序只有较低的渗透率才能开始。随着业务的增长,您将能够负担得起升级服务器容量。

我相信这是解决您问题的最佳方案。


1
投票

你检查了editorPixlr.com吗? 看看他们的API也是..


0
投票

最好的解决方案是使用silverlight(因此您已准备好代码)。如果客户端无法运行它(手机等),则在服务器端处理它。

这是最好的折衷方案。


0
投票

取决于您要定位的图像处理类型和最终用户体验。

当您希望定位移动电话时,您的图像处理需要考虑用户或收件人的手机类型(如果通过短信/彩信发送),因为不同的手机具有不同的分辨率屏幕并处理不同的主要图像格式图像和缩略图。

我建议你考虑今年微软PDC主题演讲中提到的混合云架构。这将使您拥有自己的服务器来支持您的应用程序,但如果您需要额外的容量,则可以使用AppFabric扩展到云中。

此外,为了最大限度地提高产品的市场可用性,将图像处理拉到一个通用的可重用基础架构,您可以针对不同的平台,利用每个平台的积极因素。

我曾致力于一个托管其图像处理和交付基础设施服务器端的解决方案,然后构建了不同的UI产品,允许通过桌面,MNO和AppStore进行销售。它可以工作,从商业角度来看,可以提供规模经济效益。


0
投票

为什么不提Java Applet?

好的方面是:

几乎所有浏览器支持?需要安装JRE吗?所有操作系统支持Java提供Java高级映像工具包,但如果可以调用c ++ dll,那就最好(JNI可以调用c ++ dll)


-1
投票

我认为,没有一种解决方案可以满足您的所有需求。你最好的选择,imo,是与Flash一起使用,希望Adobe与Apple达成协议,在iPhone / iPad上安装Flash。当然,主要的缺点是你必须重写大部分代码。

如果移动扇区不是绝对关键,那么请选择Silverlight选项,原因就在于您提到的原因。您还可以在浏览器外模式下使用Silverlight作为桌面应用程序。


7
投票

在Amazon E2C,Azure或Google上托管您的图像处理。 IIRC E2C已经打包了许多常见的图像处理问题,并且随时可以使用。

在将代码共享为Web服务方面,Azure可能更为熟悉

您只需支付CPU周期和传输/存储等费用


4
投票

我相信会有Silverlight和JS人员发布示例。以下是一些用actionscript编写的图像编辑器:

  1. Phoenix
  2. PhotoshopExpress

有一个ImageProcessing library开始。加上PixelBender在Flash Player 10中可用,速度很快,它运行在一个单独的线程中,而people用它做了一些相当疯狂的事情。

HTH


4
投票

Silverlight部分的一些帮助:

有一个名为Thumba的Silverlight图像编辑器。 Nokola最近制作了一个名为EasyPainter的人,他还将提供源代码。

对于图像转换,我会推荐开源库ImageTools,它还包括一些基本效果。 Silverlight有一个名为WriteableBitmap的位图像素处理类。开源库WriteableBitmapEx是Silverlight的WriteableBitmap的扩展方法的集合。 WriteableBitmap API非常简约,只有原始像素数组才能进行此类操作。 WriteableBitmapEx试图通过扩展方法来补偿它,这些方法像内置方法一样易于使用。像素着色器还可用于制作一些快速和高级效果。虽然它们受Shader Model 2限制,但着色器可用于快速模糊,着色等。


3
投票

免责声明:我认为自己是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,甚至只需应用其中一个other filters Flash offers out of the box 。使用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。它允许使用NME提供的相同API编译为SWF,也允许编译为C ++,以及target the iPhone。还有一个Android后端的工作正在进行中。如果你不打算在接下来的4-5个月内推出,那么这绝对是一个选择。


3
投票

您的问题是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 export

根据您的用例,我还鼓励您查看Amazon EC2和Google AppEngine等云托管。托管成本很便宜,并且您的任务可以轻松扩展。当涉及复杂的操作时,体验会更好,这可能会花费很多时间在桌面系统上。


2
投票

除了其他答案,另一种选择可能是混合解决方案。例如,对大多数目标受众使用Flash / Silverlight,对不支持它的用户使用服务器端处理(或者您可以为iP [hone | ad]创建本机应用程序)

您可能不得不做这样的事情,因为您定位的手机可能没有足够的处理能力,具体取决于图像处理的复杂程度。

当然,您仍然可以选择升级您的服务器,虽然您目前已经打折,但可能是far cheaper,而不是花费开发时间来创建/部署/测试客户端解决方案。


2
投票

您可以将Silverlight用于所有启用Silverlight的客户端,对于非Silverlight客户端,可以使用图像处理服务器端。由于Silverlight代码是C#,您可以对其进行双重编译以使(大部分)代码与Silverlight和非Silverlight(即服务器)相同。这将为您带来两全其美。


1
投票

你没有说你需要重写的“所有代码”是什么语言。对Javascript的半自动翻译是否可行?

也许你可以像CraigS建议的那样从服务器端开始,然后随着时间的推移将功能移到客户端而不是一次性重写所有功能。

© www.soinside.com 2019 - 2024. All rights reserved.