我正在设计一个实时进行服务器端图像处理的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)会出现这样的问题吗?
另外,请为此目的建议任何好的图像处理库。
答案 0 :(得分:2)
Imagemagick或graphicsmagick非常好,您可以在大多数语言中找到它们的包装。
使用这些库的图像操作也有很多在线示例和教程
答案 1 :(得分:2)
只是为了使事情复杂化,GIMP有一个带有Java包装器的API:JGIMP。
答案 2 :(得分:1)
我可以建议使用C ++库和Java接口。 例如,一种选择是Intel Performance Primitives,它针对SSE指令和多核进行了优化。对于某些操作,这可以快得多。 IPP包括针对大多数基本操作的高度优化的功能,如:模糊,颜色转换,不同的滤镜等。
答案 3 :(得分:0)
Java在无头环境中会遇到类似的问题Using Headless Mode in the Java SE Platform不可用。
答案 4 :(得分:0)
我认为最好的办法是尝试选项1),如果速度不够快,请尝试选项2)。 我正在我的一些应用程序中进行服务器端图像处理,我发现这些表现很安静。
答案 5 :(得分:0)
您应该查看Java2D软件包中的图像处理,如果可能的话,在具有合适图形卡的Windows机器上运行,因为Java可以使用它来加速Java2D操作。
答案 6 :(得分:0)
@WizardOfOdds:如果我理解你的话,我们需要让xvnc运行不应该无头的软件。但问题是,除非我们已经在托管环境中使用xvnc或者我们有足够的权限安装xvnc,否则我们仍然无法运行需要在机器上使用完整图形环境的软件。我认为大多数托管环境都是如此(除了他们提供完全控制的专用服务器)。如果我错了,请纠正我。
答案 7 :(得分:0)
如果您拥有服务器,最好的选择是安装一个或两个大型GPU,并使用一些GPU加速库来进行图像处理。 在我自己的CUDA(图像旋转)中的简单图像处理代码中,使用Geforce GTX-285(240核GPU)在CPU上获得超过100倍的加速
答案 8 :(得分:0)
我不会拥有自己的服务器。我将不得不与托管服务提供商一起去。这使得在安装可能需要root权限的软件时会有点复杂。
我使用jhlabs库在托管环境中部署了java servlet,用于简单的图像处理操作,如灰度缩放和观察2件事
答案 9 :(得分:0)
我正在开发一个用于在线图像创建和处理的Web应用程序,称为rastaq(http://rq-online.deesceha.de上的第一个预览)。它是一个Java Web应用程序,所有图形都基于Java 2D。它可以通过新的运算符和类型进行扩展。四处游看,看看用新参数重新计算图像需要多长时间。
硬件平台是Intel四核,8GB RAM机器。
答案 10 :(得分:0)
您可以在Java服务器端应用程序(J2EE)中使用许多图像处理框架。
看看Marvin。您可以在J2SE应用程序中以相同的方式setup项目。如果您使用的是Tomcat,请将Marvin文件夹复制到tomcat根目录中,并在项目库中添加marvin_version.jar。您可以使用许多algorithms处理服务器端的任何图像。
如果遇到任何问题,请使用项目讨论组或Google,了解如何在J2EE应用程序中使用Marvin。
关于在服务器端运行Marvin的stackoverflow帖子: Adding MarvinFramework to a WebApp on Tomcat7