开源的Java图片处理库介绍

在 Java 生态系统中,有几个流行的开源库可以用于图片处理。这些库提供了丰富的功能,如图像缩放、裁剪、颜色调整、格式转换等。以下是几个常用的 Java 图片处理库的介绍,包括它们的核心类、主要作用和应用场景,以及一些简单的例子。

Thumbnailator

Thumbnailator 是一个高性能的 Java 图像处理库,由 Google 开发。它提供了强大的图像处理功能,包括生成缩略图、图像增强、颜色转换等。

核心类

  • **Thumbnailator.Thumbnailer**:用于生成缩略图。

  • **Thumbnailator.ImageMetadata**:用于获取图像元数据。

  • **Thumbnailator.ImageProcessor**:用于图像处理。

主要作用

  • 生成缩略图。

  • 图像增强和颜色调整。

  • 图像格式转换。

应用场景

  • 网站图片缩略图生成。

  • 图像预览和编辑。

  • 图像处理任务自动化。

简单例子

以下是一个使用 Thumbnailator 生成缩略图的简单例子:

复制代码
import net.coobird.thumbnailator.Thumbnailator;
import net.coobird.thumbnailator.geometry.Positions;
import net.coobird.thumbnailator.geometry.Thumbnails;
import net.coobird.thumbnailator.filters.PngFilter;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ThumbnailatorExample {
    public static void main(String[] args) {
        try {
            // 读取源图像
            BufferedImage originalImage = Thumbnailator.readImage(new File("original.jpg"));
            // 创建缩略图配置
            Thumbnails.Builder<BufferedImage> thumbnailBuilder = Thumbnails.of(originalImage)
                    .size(128, 128)
                    .outputFormat("JPEG")
                    .outputQuality(0.75f);
            // 添加滤镜
            thumbnailBuilder.filter(PngFilter.class);
            // 生成缩略图
            BufferedImage thumbnail = thumbnailBuilder
                    .sourceRegion(Positions.CENTER, 128, 128)
                    .build();
            // 保存缩略图
            thumbnail.getGraphics().drawImage(thumbnail, 0, 0, null);
            Thumbnailator.writeImage(thumbnail, new File("thumbnail.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ImageJ

ImageJ 是一个开源的图像处理软件,它最初是为生物医学图像分析而设计的。它提供了一个强大的图像处理框架,包括许多内置的图像处理插件。

核心类

  • **ij.ImagePlus**:表示图像及其元数据。

  • **ij.ImageStack**:表示图像堆栈。

  • **ij.IJ**:提供访问 ImageJ 功能的方法。

主要作用

  • 图像显示和分析。

  • 图像处理和增强。

  • 图像格式转换。

应用场景

  • 生物医学图像分析。

  • 科研图像处理。

  • 图像质量评估。

简单例子

以下是一个使用 ImageJ 打开图像并显示它的简单例子:

复制代码
import ij.ImagePlus;
import ij.IJ;
public class ImageJExample {
    public static void main(String[] args) {
        // 打开图像
        ImagePlus imagePlus = IJ.openImage("image.jpg");
        // 显示图像
        imagePlus.show();
    }
}

imgscalr

imgscalr 是一个简单的 Java 图像缩放库,它提供了高效、高质量的图像缩放功能。

核心类

  • **imgscalr.ImageScaleOp**:用于图像缩放。

主要作用

  • 图像缩放。

  • 图像质量调整。

应用场景

  • 网站图片优化和调整。

简单例子

以下是一个使用 imgscalr 缩放图像的简单例子:

复制代码
import imgscalr.ImageScaleOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImgScalrExample {
    public static void main(String[] args) {
        try {
            // 读取源图像
            BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
            // 创建缩放操作
            ImageScaleOp scaleOp = new ImageScaleOp(originalImage, 0.5f, imgscalr.Interpolation.BILINEAR);
            // 缩放图像
            BufferedImage scaledImage = scaleOp.filter(null, null);
            // 保存缩放后的图像
            ImageIO.write(scaledImage, "jpg", new File("scaled.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ImageJ Ops

ImageJ Ops 是一个基于 Apache Commons Math 的图像处理库,它是 ImageJ 的一部分。它提供了丰富的图像处理操作,包括数学、统计、几何、颜色空间转换等。

核心类

  • **ops.ImageOp**:表示一个图像操作。

  • **ops.filter.AbstractConvolutionOp**:表示卷积操作,如模糊、锐化等。

  • **ops.geometric.GeometricOp**:表示几何操作,如缩放、旋转等。

主要作用

  • 图像滤波和增强。

  • 图像几何变换。

  • 图像数学和统计操作。

应用场景

  • 图像分析任务。

  • 图像预处理和后处理。

  • 科研图像处理。

简单例子

以下是一个使用 ImageJ Ops 进行图像模糊的简单例子:

复制代码
import net.imglib2.img.Img;
import net.imglib2.img.array.ArrayImgs;
import net.imglib2.img.basictypeaccess.array.IntArray;
import net.imglib2.ops.OpEnvironment;
import net.imglib2.ops.RealOp;
import net.imglib2.ops.RealOpImage;
import net.imglib2.ops.filter.convolution.Convolution;
import net.imglib2.type.numeric.real.FloatType;
public class ImageJOpsExample {
    public static void main(String[] args) {
        // 创建一个简单的图像
        Img<FloatType> img = ArrayImgs.floats(new int[]{10, 10}, new FloatType(1.0f));
        // 创建卷积操作,使用高斯核进行模糊
        RealOpImage<FloatType, FloatType> kernel = Convolution.createGaussianKernel(2, 2, 1.0);
        RealOpImage<FloatType, FloatType> blurredImg = Convolution.convolve(img, kernel);
        // 输出结果
        blurredImg.forEachPixel(p -> System.out.println(p.getRealDouble()));
    }
}

总结

Java 图片处理库提供了丰富的功能,用于处理和增强图像。Thumbnailator、ImageJ、imgscalr 和 ImageJ Ops 是几个流行的库,它们在不同的应用场景中非常有用。通过使用这些库,你可以轻松地实现图像缩放、裁剪、颜色调整、格式转换等功能。这些库的简单例子展示了如何使用它们的基本功能来处理图像。在实际应用中,你可以根据需要选择合适的库,并根据项目需求进行更复杂的图像处理。

相关推荐
非优秀程序员7 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻8 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
文丑颜不良啊10 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang11 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪12 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息12 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼12 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff13 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff14 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
SL_staff15 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品