【问题标题】:Serverside image processing服务器端图像处理
【发布时间】:2011-02-04 01:26:16
【问题描述】:

我正在设计一个实时进行服务器端图像处理的 Web 应用程序。处理任务包括在各种格式的图像上应用不同的效果,如灰度、模糊、油画、铅笔素描等。我想使用我已经熟悉的 java/servlets 来构建它。我找到了 3 个选项,

1) 使用纯 java 映像库,如 java.awt 或 http://www.jhlabs.com/ip/index.html 2) 使用 Gimp/ImageMagick 等命令行工具 3) 使用具有 java 绑定的 c,c++ 图像库。

我不知道以上哪个选项在考虑性能方面比较好。看起来选项 2) 和 3) 在性能方面表现良好,但在排除 1) 之前我想确定一下。我还听说 gimp 不能使用命令行运行,除非服务器上已经安装了 gtk 或 xwindows。 2) 或 3) 在服务器端运行时会不会出现此类问题?

还请为此目的推荐任何好的图像处理库。

【问题讨论】:

  • @spol:我使用 ImageMagick 已经有很多次了(因为之前有任何类型的 ImageMagick Java API)。但是请注意,并不是因为服务器是“无头”的,所以您不能在其中伪造完整的图形环境:我有两个专用的无头服务器,它们都非常乐意运行 Xvnc,我可以启动 any他们上面的软件,甚至是那些不打算在“无头”机器上运行的软件。我的观点是:这并不是因为服务器在物理上是“无头”的,所以它是无头的。我不是建议你运行Xvnc/Gimp,只是说你可以运行任何程序服务器端。
  • (提示无意义的“服务器不应该在 3..2..1 中运行 Xvnc”... 由人们没有意识到整个 friggin ' 像 Xvnc 这样的东西的意义在于充当服务器;)

标签: java image-processing image-manipulation


【解决方案1】:

Imagemagick 或 graphicsmagick 相当不错,您可以在大多数语言中找到它们的包装器。

也有很多在线示例和教程使用这些库进行图像处理

【讨论】:

    【解决方案2】:

    更复杂的是,GIMP 有一个 API,带有一个 Java 包装器:JGIMP

    【讨论】:

      【解决方案3】:

      我可以推荐使用 C++ 库和 Java 接口。 例如,一种选择是针对 SSE 指令和多核优化的 Intel Performance Primitives。对于某些操作,这可能要快一个数量级。 IPP 包含针对大多数基本操作的高度优化功能,例如:模糊、颜色转换、不同的滤镜等。

      【讨论】:

        【解决方案4】:

        我认为最好的办法是尝试选项 1),如果速度不够快,请尝试选项 2)。 我在我的一些应用程序中进行服务器端图像处理,我发现性能非常好。

        【讨论】:

          【解决方案5】:

          您应该查看 Java2D 包中的图像处理,如果可能的话,可以在带有合适显卡的 Windows 机器上运行,因为 Java 可以使用它来加速 Java2D 操作。

          【讨论】:

            【解决方案6】:

            如果Using Headless Mode in the Java SE Platform 不可用,Java 在无头环境中也会出现类似问题。

            【讨论】:

              【解决方案7】:

              @WizardOfOdds:如果我理解正确,我们需要 xvnc 来运行不应该无头运行的软件。但关键是,除非我们已经在托管环境中安装了 xvnc,或者我们有足够的权限来安装 xvnc,否则我们仍然无法在机器上运行需要完整图形环境的软件。我认为大多数托管环境都是这种情况(除了他们提供的您可以完全控制的专用服务器)。如果我错了,请纠正我。

              【讨论】:

                【解决方案8】:

                如果您拥有服务器,最好的选择是安装一两个大型 GPU,并使用一些 GPU 加速库来进行图像处理。 在我自己在 CUDA(图像旋转)中的简单图像处理代码中,我使用 Geforce GTX-285(240 核 GPU)在 CPU 上获得超过 100 倍的加速

                【讨论】:

                  【解决方案9】:

                  我不会拥有自己的服务器。我将不得不与托管服务提供商一起去。这使得安装可能需要 root 权限的软件时有点复杂。

                  我在托管环境中部署了 java servlet,使用 jhlabs 库进行简单的图像处理操作,如灰度缩放和观察 2 件事

                  1. 还没有遇到无头环境的问题。稍后当我尝试执行更复杂的图像处理操作时可能会遇到此问题。
                  2. 性能还不错。但我必须进行负载测试,以确保在实际负载下性能可以接受。

                  【讨论】:

                    【解决方案10】:

                    我正在开发一个用于在线图像创建和处理的网络应用程序,称为 rastaq(第一次预览在 http://rq-online.deesceha.de)。它是一个 Java Web 应用程序,所有图形都基于 Java 2D。它可以通过新的运算符和类型进行扩展。试一试,看看使用新参数重新计算图像需要多长时间。

                    硬件平台是 Intel 四核、8GB RAM 机器。

                    【讨论】:

                      【解决方案11】:

                      您可以在 Java 服务器端应用程序 (J2EE) 中使用许多图像处理框架。

                      看看Marvin。您可以在 J2SE 应用程序中以相同的方式 setup 项目。如果您使用的是 Tomcat,请将 Marvin 文件夹复制到 tomcat 根目录中,并将 marvin_version.jar 添加到您的项目库中。您可以使用多个algorithms 在服务器端处理任何图像。

                      如果有任何问题,请使用项目讨论组或谷歌了解如何在 J2EE 应用程序中使用 Marvin。

                      关于在服务器端运行 Marvin 的 stackoverflow 帖子: Adding MarvinFramework to a WebApp on Tomcat7

                      【讨论】:

                        猜你喜欢
                        • 2010-09-13
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-12-20
                        • 2012-02-23
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多