什么是最好的Java图像处理库/方法?[关闭]


244

我同时使用JAI媒体API和ImageMagick吗?

ImageMagick存在一些可伸缩性问题,基于JNI的JMagick也没有吸引力。与ImageMagick相比,JAI执行大小调整操作时的质量结果较差。

有谁知道过任何出色的开源或商业工具,它们都是本机Java并能提供高质量的结果?


5
除了javadocs之外,JMagick几乎没有任何文档。我刚刚花了两个小时来寻找本来应该很容易做的事情。
Alex Ciminian 2010年

确实。我选择退出流程,并使用apache exec使用ImageMagick作为管理流程的一种方式。这很好。我可能已经为此专门构建了一个图像服务器。很难找到具有ImageMagick的质量和功能的东西。
Daniel Honig

158
像这样的问题被关闭成为话题是荒谬的。超过100000次观看,这显然是人们在问的问题。有时人们并不完全知道他们将要做的事,并希望其他人在最好的通用框架上“提出意见”。太夸张了!
user467257 2014年

12
如果人们讨论Java编程关键方面的利弊方式,那怎么了?那不是应该做的吗?恕我直言,此类问题应谨慎处理和维护,以为从头开始研究特定主题的开发人员提供良好的参考。

20
对。Google的最佳搜索结果,java image processing library但照常关闭。这些天来,适度性太过分了。
Stijn de Witt 2015年

Answers:


88

ImageJ,它以

世界上最快的纯Java图像处理程序

它可以在另一个应用程序中用作库。它的体系结构并不出色,但是可以完成基本的图像处理任务。


2
我在许多图像处理应用程序中将ImageJ用作库。这是一个非常不错的Java库。它也与Java2D很好地集成在一起,因此您可以很容易地混合和匹配2。
hohonuuli

3
当时我使用ImageJ时,其API非常笨拙,它更像是一个您可以为其编写插件的应用程序,而不是一个库。到目前为止,我还记得尝试在旧的AWT代码库中开发新的GUI很痛苦。
伊万

4
我只是浪费了半天时间来尝试进行简单的图像旋转,缩放和裁剪。现在是2019年,ImageJ的文档不可用。
M. Leonhard

133

我知道这个问题已经很老了,但是随着新软件的问世,它确实有助于获得人们可能感兴趣的项目的新链接。

imgscalr是纯Java图像大小调整(以及诸如填充,裁剪,旋转,变亮/变暗等简单操作)库,使用起来非常痛苦-单个类由一组简单的图形操作组成,这些操作均定义为静态方法,您传递图像并返回结果。

使用该库的最基本示例如下所示:

BufferedImage thumbnail = Scalr.resize(image, 150);

通过一些质量调整等更典型的用法来生成图像缩略图可能看起来像这样:

import static org.imgscalr.Scalr.*;

public static BufferedImage createThumbnail(BufferedImage img) {
    // Create quickly, then smooth and brighten it.
    img = resize(img, Method.SPEED, 125, OP_ANTIALIAS, OP_BRIGHTER);

    // Let's add a little border before we return result.
    return pad(img, 4);
}

所有图像处理操作都使用原始Java2D管道(在主要平台上已通过硬件加速),不会像代码中的库争用那样引入通过JNI进行调用的麻烦。

imgscalr也已在许多地方大规模生产中使用-包含AsyncScalr类使其成为任何服务器端图像处理的理想选择。

可以使用最高的ULTRA_QUALITY模式对图像质量进行大量调整,以在速度和质量之间进行权衡,从而提供比GIMP Lancoz3实现更好的缩放结果。


@Riyad Kalla似乎很有趣,谢谢...但是我不知道它可以用于商业项目吗?
user592704 2013年

2
@ user592704绝对地,imgscalr是根据Apache 2许可获得许可的。相同的许可Apache Foundation上的所有内容均获得许可。您可以使用它,并在开源或商业产品中使用它来做您想做的事情。imgscalr实际上已经在生产中的许多商业Web应用程序中进行了部署。
2013年

1
@DavidParks您是正确的,一旦拥有BufferedImage实例(解码的图像数据),imgscalr就可以接管,而不是之前。我什至不想考虑尝试做自己的解码器/编码器,因为这些管道早在Java2D团队的掩护下就已通过硬件加速进行了尝试-尝试重做所有无错误且有效的工作将是一项艰巨的任务。
里亚德·卡拉

1
@gstackoverflow imgscalr在原始BufferedImage实例(解码的图像数据)上运行-因此,其他一些东西(通常是ImageIO库)需要将编码的图像数据解码为BufferedImage,然后在imgscalr完成操作后将其重新编码为新图像在它上面-用另一种方式“ imgscalr不在乎文件格式,在将图像交给imgscalr之前您已经对其进行了解码”
Riyad Kalla

1
ImgScalr仅适用于基本图像处理。如果涉及图像加载和处理。它缺乏复杂性。
MarekM,2015年

31

另一个不错的选择:马文


9
非常感谢。你救了我的一天!:D(PS:我不是OP。我在谷歌搜索时碰到了这篇文章,相信我,对我有很大帮助!
missingfaktor 2011年

3
@missingfaktor现在我欠你一杯啤酒。您对约瑟夫的赞美也挽救了我的生命。约瑟夫,你也喝啤酒了:)!
2011年

3
该URL显然不再存在,但marvinproject.sourceforge.net似乎是新的URL。
Amos M. Carpenter'4

好的,我有义务给这个人一个外观。=)
Marvo 2012年

看起来真的很好,请尝试一下。
Ridcully



5

尝试使用Catalano Framework

关键点:

  • 像AForge.NET/Accord.NET这样的架构。
  • 在相同的代码下(台式机和Android)在两种环境中运行。
  • 包含多个并行的过滤器。
  • 发展蒸蒸日上。

Catalano框架是用于Java和Android的科学计算的框架。该项目最初是用于.NET的AForge.NET和Accord.NET框架的许多功能的最初移植,但是随着更高级的功能稳步增长,现在这些项目之间正在共享这些功能。

例:

FastBitmap fb = new FastBitmap(bitmap);

Grayscale g = new Grayscale();
g.applyInPlace(fb);

Threshold t = new Threshold(120);
t.applyInPlace(fb);

bitmap = fb.toBitmap();

//Show the result

6
The best framework in Java is Catalano Framework听起来您在宣传自己的产品。您的框架可能很棒,但是您应该按照FAQ中的说明披露与它的隶属关系。
Matthias Braun 2014年

@MatthiasBraun好的,我同意你的要求,我不知道。我编辑了答案。
迭戈·卡塔拉诺



3

http://im4java.sourceforge.net/-如果您正在运行linux,则派生一个新进程并不昂贵。


不过请注意内存不足的错误...
Claes Mogren

分叉很昂贵。它会占用大量内存。请参阅该人在coderanch.com/t/419196/java/java/there-any-way-execute-Linux底部的文章中的引用 (本文为:developers.sun.com/solaris/articles/subprocess/subprocess .html
Plaudit Design 2011年

@Plaudit checkout gm4java,它以交互模式创建GM进程池,无需每次都派生来转换图像。kennethxu.blogspot.com/2013/04/...
肯尼斯·许

2

对于商业工具,您可能想要尝试Snowbound。

http://www.snowbound.com/

我对他们的经验有些过时,但是我发现他们的Java Imaging API比JAI易于使用,而且速度更快。

他们的客户支持和代码示例也非常好。



1

我不能说这是“最好的”库,但是我想您可以尝试以下方法:http : //algart.net/java/AlgART/ 这是一个开放源代码的Java库,通过以下方式支持通用的“智能”数组和矩阵使用数组和矩阵的不同类型(从1位到64位浮点)的元素,包括2D,3D和多维图像处理以及其他算法。不幸的是,目前它没有足够的演示和示例,但另一方面,它包含许多JavaDocs。几年来,它奠定了商业软件(SIMAGIS)的基础,但是现在它是开源的。


2
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。
Matthias 2013年

没错,我已经编辑了第一条评论。
丹尼尔(Daniel)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.