35

我们正在构建一个需要大量图像处理的基于 Web 的应用程序。我们希望这种处理负载尽可能多地放在客户端上,并且我们希望尽可能多地支持平台(甚至是移动设备)。

是的,我知道,一厢情愿

这是信息:

  1. 图像处理是一些数据的光栅化。就像从 PDF 文件创建 PNG 图像一样。

  2. 我们没有太多的服务器能力。所以客户端处理是必须的。

所以,我们正在考虑:

  1. Flash - 最普遍,但从我读到的开发工具乏善可陈。(目前不支持 iPhone/iPad)。

  2. Silverlight - 允许我们使用 .NET CLR,所以大 ++(很多代码都在 .NET 中)。但大多数手机不支持(传闻未来支持安卓)

  3. HTML5 + Javascript - 可能是最“便携”的选项。问题是必须用 Javascript 重写所有图像处理代码。

任何可能有帮助的想法或架构?澄清:我不需要更多关于 Silverlight 和 Javascript 可用的库的想法。我的困境是

  • 选择 Silverlight 意味着不支持大多数手机
  • 选择 Flash 意味着我们必须重新开发大部分代码并且不支持 iPhone/iPad
  • HTML5 + Javascript 我们必须重新开发我们的大部分代码,但尚未在所有浏览器中完全支持
  • 选择两个(Silverlight + Flash)将太昂贵

我可能会错过任何开箱即用或聪明的想法/替代方案吗?

4

15 回答 15

29

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

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

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

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

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

您说您的服务器能力有限,但与软件开发成本相比,服务器处理能力很便宜。事实上,外包您的服务器组件并为您使用的内容付费并不是那么昂贵。您的应用程序开始时的渗透率很可能很低。随着业务的增长,您将有能力升级您的服务器容量。

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

于 2010-02-04T04:25:16.807 回答
7

在 Amazon E2C、Azure 或 Google 上托管您的图像处理。IIRC E2C 打包了许多常见的图像处理问题,一切就绪。

Azure 可能更熟悉将代码共享为 Web 服务的领域

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

于 2010-02-05T00:50:47.973 回答
4

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

  1. 凤凰
  2. Photoshop速递

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

高温高压

于 2010-02-01T04:03:00.743 回答
4

Silverlight 部分的一些帮助:

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

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

于 2010-02-01T10:02:05.897 回答
3

免责声明:我认为自己是 Flash 平台的倡导者。我钦佩 Silverlights 作为一种通过浏览器部署几乎所有 .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 的子集,因此移植经典过滤器不应该太耗时。还有炼金术(针对 Flash Player 10 的 LLVM 后端)将是一个值得研究的选项,尽管它还不是很稳定。

您的应用程序的最大部分将是大量的 GUI 设计、GUI 实现、业务逻辑等。Flash 在简单但相当快速的图像处理方面确实很棒,并且使用 Flex 框架和 MXML,您将拥有一个强大的工具来高效地进行创建您的应用程序的 GUI,它可以与几乎任何平台的大量服务器解决方案很好地互操作。

此外,Flash 拥有一个强大而活跃的社区,提供大量的教程、代码片段、库和框架,以及一个庞大的生态系统,以及用于将 Flash 内容交付到其他平台(包括即将推出的Flash CS5或提到的 Elips )的交叉编译工具)。我不明白,你从哪里得到的印象,Flash 平台缺乏开发工具。.NET 套件的不同之处在于它们由众多供应商提供。George 已经指出了即将推出的 Flash Player 10.1,但我想强调的是,这让许多跨平台的考虑变得过时了。

最后但并非最不重要的一点是,我想指出Haxe。它允许编译为 SWF,也允许编译为 C++,使用与NME提供的完全相同的 API ,以针对 iPhone。android后端也有工作正在进行中。如果您不打算在接下来的 4-5 个月内推出,那么这绝对是一个选择。

于 2010-02-10T15:06:30.023 回答
3

您的问题是Haxe编程语言的完美目标。Haxe 是为 Web 编写的,可以编译为 JavaScript、Flash 和 Objective-C(可能很快会是 Java/.NET)。因此,您无需选择要投资的平台,而是选择哪种语言。Haxe 很容易被 AcitonScript 程序员采用。

当 Flash 可用时,在 JavaScript 沙箱中运行图像处理算法是没有意义的,因为它会快得多。在 iPhone 这样的移动设备上使用 JavaScript 运行繁重的图像处理算法也是没有意义的。我只会支持 JavaScript 作为最糟糕的后备解决方案。

如果你不喜欢使用 Haxe,我会选择 Flash。如果这是您的问题,您也可以为 iPhone 部署 Flash 应用程序。这也非常棒,因为您可以获得本机 ARM 代码。实际上,有很多用于专业 Flash 开发的工具可用。FDTIntelliJ IDEA就是其中的两个。在撰写本文时,最好的 Haxe IDE 可能是FlashDevelop

所以我绝对不会使用 JavaScript 作为唯一的解决方案。Haxe 非常适合您尝试实现的目标。如果您不信任或不想投资 Haxe,您可以使用 Flash,因为iPhone/iPad 导出

根据您的用例,我还鼓励您查看诸如 Amazon EC2 和 Google AppEngine 之类的云托管。托管成本很便宜,并且扩展对于您的任务来说很容易。当涉及到在桌面系统上可能需要大量时间的复杂操作时,体验会好得多。

于 2010-02-10T17:31:21.447 回答
2

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

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

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

于 2010-02-04T10:17:37.970 回答
2

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

于 2010-02-10T17:16:27.623 回答
1

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

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

于 2010-02-04T06:13:52.190 回答
1

你检查过 Pixlr.com 的编辑? 也看看他们的API ..

于 2010-02-10T17:06:27.657 回答
0

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

这是最好的妥协。

于 2010-02-10T15:10:15.420 回答
0

取决于图像处理的类型和您所针对的最终用户体验。

当您正在寻找目标手机时,您的图像处理将需要考虑用户或接收者拥有的手机类型(如果通过 SMS/MMS 发送消息),因为不同的手机具有不同的分辨率屏幕并处理不同的主要图像格式图像和缩略图。

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

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

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

于 2010-02-10T17:01:32.347 回答
0

为什么不提 Java Applet 呢?

好的方面是:

几乎所有浏览器都支持?需要安装 JRE 吗?所有OS都支持Java提供Java Advanced Image kit,但是如果可以调用c++ dll那最好(JNI可以调用c++ dll)

于 2010-07-07T04:04:47.813 回答
0

在 Python 中,最流行的图像处理库之一是pillow. 通过该pyodide项目(通过 emscripten 在浏览器中运行的 python),可以使用 和 之类的库pillow进行numpy图像(或矩阵)处理,并将输出转换为 base64 字符串(通过 Python 标准库)。然后可以将其传递给您的<img>html 元素,无论是原生 JS document还是使用 React 之类的库。

于 2021-09-18T17:40:49.387 回答
-1

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

如果移动部门不是绝对重要的,那么出于您已经提到的原因选择 Silverlight 选项。您还可以在浏览器外模式下使用 Silverlight 作为桌面应用程序工作。

于 2010-02-04T04:46:19.013 回答