【问题标题】:What is the best java image processing library/approach? [closed]什么是最好的 java 图像处理库/方法? [关闭]
【发布时间】:2025-12-10 15:30:01
【问题描述】:

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

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

有谁知道任何优秀的工具,无论是开源的还是商业的,都是原生 java 并提供高质量的结果?

【问题讨论】:

  • JMagick 几乎没有文档,除了 javadocs。我刚刚花了两个小时寻找应该很容易做到的事情。
  • 确实如此。我选择退出进程并使用 ImageMagick 使用 apache exec 作为管理进程的一种方式。这工作得很好。我可能已经为此目的构建了一个图像服务器。很难找到具有 ImageMagick 质量和功能的东西。
  • 像这样的问题被关闭为题外话是荒谬的。超过 100000 次观看,这显然是人们在问的问题。有时人们并不确切地知道他们将要做什么,并且会欣赏其他人对最佳总体框架的“自以为是”的回应。太夸张了!
  • 如果人们讨论 Java 编程的一个关键方面的利弊,会有什么问题?这不是应该做的吗?恕我直言,此类问题应仔细审核和维护,以便为重新开始特定主题的开发人员提供良好的参考。
  • 是的。在 Google 中以 java image processing library 获得最高结果,但已关闭……像往常一样。这些天来,审核过度了。

标签: java image-processing image-manipulation


【解决方案1】:

Processing 是新的,但非常非常好。

【讨论】:

  • 我知道处理,但是人们真的在使用它吗,我想在我的 X jpeg 的时尚库上运行 X 转换?
  • 我用过,感觉真的很强大,值得下注
  • 实际上核心库(可用于嵌入功能)是 LGPL。但是没有人问许可证是什么。 wiki.processing.org/w/…
【解决方案2】:

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

http://www.snowbound.com/

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

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

【讨论】:

    【解决方案3】:

    ImageJ,号称是

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

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

    【讨论】:

    • 我在许多图像处理应用程序中使用 ImageJ 作为库。这是一个非常不错的 Java 库。它也很好地与 Java2D 集成,因此您可以很容易地混合和匹配两者。
    • 在我使用 ImageJ 的时候,它的 API 非常笨拙。它更像是一个应用程序,您可以为其编写插件而不是库。据我记得,尝试在旧的 AWT 代码库中开发新的 GUI 是一件很痛苦的事情。
    • 我只是浪费了半天时间来尝试做一个简单的图像旋转、缩放和裁剪。现在是 2019 年,ImageJ 的文档不可用。
    【解决方案4】:

    我不是 Java 人,但 OpenCV 非常适合我的需求。不确定它是否适合你的。这是一个Java端口,我认为: http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html

    【讨论】:

      【解决方案5】:

      RoboRealm 视觉软件 list 在许多其他非 Java 库中提到了 JHLabsNeatVision

      【讨论】:

        【解决方案6】:

        另一个不错的选择:Marvin

        【讨论】:

        • 非常感谢。你救了我的一天! :D (PS:我不是 OP。我在谷歌搜索时发现了这篇文章并相信我,它对我帮助很大!(如果有一天我见到你,我会给你买啤酒。))。
        • @missingfaktor 现在我欠你一杯啤酒。你对约瑟夫的赞美也拯救了我的一天。约瑟夫,你也喝啤酒了 :)!
        • 该 URL 显然不再存在,但 marvinproject.sourceforge.net 似乎是新 URL。
        • 好的,我有义务看一下这个。 =)
        • 看起来很不错,会试一试。
        【解决方案7】:

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

        【讨论】:

        【解决方案8】:

        imo 最好的方法是使用GraphicsMagick Image Processing Systemim4java 作为Java 的命令行接口。

        GraphicsMagick 有很多优点,但只有一个优点:

        • GM 用于处理数十亿 世界上最大的照片文件 网站(例如 Flickr 和 Etsy)。

        【讨论】:

        • 它只是一个命令行包装器——不是一个库......
        【解决方案9】:

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

        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 当然,imgscalr 是在 Apache 2 许可下获得许可的; Apache 基金会的所有内容都使用相同的许可证。您可以在开源或商业产品中使用它并做您想做的事情。 imgscalr 实际上已经部署在许多生产中的商业网络应用程序中。
        • @DavidParks 你是对的,imgscalr 的目的是在你拥有 BufferedImage 实例(解码的图像数据)后接管,而不是之前。我什至不想考虑走上尝试自己的解码器/编码器的道路,因为这些管道早已在 Java2D 团队的掩护下进行了硬件加速——试图重做所有工作,没有错误且高效将是一项艰巨的任务。
        • @g* imgscalr 对原始 BufferedImage 实例(解码的图像数据)进行操作——因此其他东西(通常是 ImageIO 库)需要将编码的图像数据解码为 BufferedImage,然后将其重新编码为完成对 imgscalr 的操作后的新图像 - 换句话说“imgscalr 不关心文件格式,您在将图像交给 imgscalr 之前已经对其进行了解码”
        • ImgScalr 仅适用于基本的图像处理。如果涉及图像加载和处理。它缺乏复杂性。
        【解决方案10】:

        尝试使用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
        

        【讨论】:

        • The best framework in Java is Catalano Framework 这听起来像是在宣传自己的产品。您的框架可能很棒,但您应该披露您与它的从属关系,如 FAQs 中所述。
        • @MatthiasBraun 好的,我同意你的观点,我不知道。我编辑了答案。
        【解决方案11】:

        我不能说它是“最好的”库,但我认为你可以试试这个: http://algart.net/java/AlgART/ 它是一个开源 Java 库,支持具有不同类型(从 1 位到 64 位浮点)元素的通用“智能”数组和矩阵,包括 2D、3D 和多维图像处理和其他算法,与数组和矩阵。 不幸的是,现在它包含的演示和示例不够多,但另一方面,它包含很多 JavaDocs。几年来,它一直处于商业软件 (SIMAGIS) 的基础,但现在它是开源的。

        【讨论】:

        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
        • 你说得对,我已经编辑了第一条评论。
        最近更新 更多