客户端图像处理
image-processing
6
0

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

我可能会缺少任何开箱即用的好主意/替代品吗?

参考资料:
Stack Overflow
收藏
评论
共 8 个回答
高赞 时间 活跃

我确定将会有Silverlight和JS人员发布示例。这是一些用动作脚本编写的图像编辑器:

  1. 凤凰
  2. PhotoshopExpress

首先有一个ImageProcessing库 。另外, PixelBender在Flash Player 10中可用,它速度快,在单独的线程中运行,并且人们可以用它做一些非常疯狂的事情。

高温超导

收藏
评论

Silverlight部分的一些帮助:

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

对于图像转换,我建议使用开源库ImageTools ,其中还包含一些基本效果。 Silverlight有一个用于位图的像素处理的类,称为WriteableBitmap。开源库WriteableBitmapEx是Silverlight的WriteableBitmap扩展方法的集合。 WriteableBitmap API非常简单,只有原始的Pixels数组可用于此类操作。 WriteableBitmapEx库尝试使用易于使用的扩展方法(如内置方法)来弥补这一点。像素着色器也可以用于制作一些快速和高级的效果。尽管它们受Shader Model 2限制,但可以用于快速模糊,着色等操作。

收藏
评论

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

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

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

收藏
评论

这是软件架构师一直遇到的问题。和往常一样,没有理想的解决方案。您需要选择哪种折衷方案最适合您的业务。

总而言之,您的大多数图像处理软件都是用.NET编写的。您想在移动设备上在客户端上运行它,但是.NET在移动设备上的普及程度有限。具有较高渗透率的替代方案(例如Flash)将要求您重新编写代码,而这是您负担不起的。此外,iPhone / iPad不支持这些替代方法。

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

那么,您需要在哪些方面妥协呢?在我看来,即使您重新开发Flash,也仍然会错过主要市场(iPhone)。无论如何,重新开发软件都非常昂贵。

这是解决问题的最佳方法-您需要在“客户端执行”约束上做出妥协。如果执行服务器端,那么您将保留现有代码,并且还可以将其部署到几乎每个移动客户端(包括iPhone)。

您说服务器能力有限,但与软件开发成本相比,服务器处理能力便宜。确实,外包您的服务器组件并仅仅为您使用的东西付费并不昂贵。首先,您的应用程序很可能只具有较低的渗透率。随着业务的增长,您将有能力升级服务器容量。

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

收藏
评论

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

无论如何,您可能都必须做这样的事情,因为目标手机可能没有足够的处理能力,这取决于图像处理的复杂程度。

当然,您仍然可以选择升级服务器,尽管您目前打折了,但是它可能比花费开发时间来创建/部署/测试客户端解决方案便宜得多。

收藏
评论

免责声明:我认为自己是Flash平台的倡导者。我很欣赏Silverlights作为通过浏览器部署几乎任何.NET内容的技术的巨大潜力,但是它的渗透率很低,市场营销非常严格,尽管很多人(大多数人都不知道Flash或Silverlight)都认为Silverlights是这种技术-与Flash不是Sliverlight的竞争对手一样,它不是Flash的竞争对手。我心中的理想主义者喜欢使用标准而不是依靠第三方专有软件来在HTML + JS中进行所有操作的想法。但事实是,JS运行缓慢且API受限制,并且JS,HTML和CSS的实现在浏览器之间完全不一致。

如果您真的想坚持使用.NET,并且对定位iPhone及其兄弟产品非常感兴趣,那么您可能想要查看MonoTouch

尽管如此,即使这可能会让您感到惊讶,但我还是要告诉您使用Flash。 :)

为什么?图像处理位是应用程序中最小的部分。无论您在写什么,我都非常确定。我不了解Silverlight,但是在Flash中,可以在一天之内创建“ Thumba”和“ EasyPainter”使用的滤镜,其中大多数仅使用ConvolutionFilterColorMatrixFilterDisplacementMapFilterBitmapData :: paletteMap甚至仅应用一个Flash提供其他过滤器中的开箱即用 。乔治指出,可以使用PixelBender创建任何其他内容。内核语言是C的子集,因此移植经典过滤器应该不会太耗时。同样, 炼金术 (针对Flash Player 10的LLVM后端)将是值得研究的选择,尽管它还不是很稳定。

应用程序的最大部分将是大量的GUI设计,GUI实现,业务逻辑等。Flash在简单而合理的快速图像处理方面确实很棒,借助Flex框架和MXML,您将拥有一个强大的工具来高效地工作创建您的应用程序的GUI,可以与几乎所有平台上的多种服务器解决方案很好地互操作。

此外,Flash拥有一个强大而活跃的社区,提供大量的教程,代码段,库和框架以及庞大的生态系统,以及交叉编译工具,可将Flash内容传递到其他平台(包括即将推出的Flash CS5或上述Elips) )。我不明白您的印象是Flash平台缺少开发工具。与.NET套件的区别在于它们是由许多供应商提供的。 George已经指出了即将推出的Flash Player 10.1,但我想强调一点,那就是,这使得许多跨平台的考虑都已过时。

最后但并非最不重要的一点,我想指出Haxe 。它允许使用NME提供的相同API编译为SWF,也可以编译为C ++,以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之类的云托管。托管成本低廉,扩展很容易完成您的任务。当涉及到在台式机系统上可能要花费大量时间的复杂操作时,这种体验会好得多。

收藏
评论

您可以将Silverlight用于所有启用了Silverlight的客户端,对于非Silverlight客户端,请使用图像处理服务器端。由于Silverlight代码是C#,因此您可以对其进行两次编译,以使(大多数)与Silverlight和非Silverlight(即服务器)相同的代码工作。这使您两全其美。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号