Java 源代码中的图像压缩方法?

2024 年 9 月 10 日 | 阅读 3 分钟

图像压缩允许我们在不显著损害视觉质量的情况下减小图像文件的大小。有两种类型的压缩。首先,我们使用有损压缩,接受较低的图像质量,但实现更小的文件大小。例如,JPEG 和 WebP 格式用于有损压缩。其次,我们使用无损压缩,在压缩过程中保留数据和信息。例如,PNG 和 GIF 格式用于无损压缩。

现在,我们将重点关注使用 JPEG 格式的有损压缩,因为它是互联网上使用最广泛的格式。之后,我们将介绍如何压缩 PNG 图像,这称为 PNG 图像优化。

在 Java 中压缩图像

首先,我们将使用 Java Image I/O 的内置 API 来读取和写入图像。它支持 JPEG、PNG、BMP 和 GIF 等各种图像格式。让我们看看如何使用 Java Image I/O 压缩图像。

首先,我们从资源文件中读取图像。然后,我们为 JPG 格式创建一个 ImageWriter,并设置此写入器的输出文件。在写入图像之前,我们创建一个 ImageWriteParam 对象来定义压缩模式和 50% 的压缩质量。最后,我们写入图像,关闭输出流,并清理写入器。

例如,通过将示例图像压缩 50%,我们将文件大小从 790KB 减少到 656KB,略低于原始大小的 83%。因此,图像质量的变化并不明显。

ImageCompressor.java

使用 Thumbnails 库压缩图像

Thumbnails 库是一个简单而通用的库,用于调整图像大小和压缩图像。首先,我们将该库添加到我们的 pom.xml 中。

让我们看看如何使用 Thumbnails 类压缩图像。

输出

Image compression completed.

使用 Pngtastic 库压缩图像

PNG 优化是一种专门为 PNG 图像设计的压缩类型。我们将使用 Pngtastic 库来优化 PNG 图像。首先,让我们将最新的存储库添加到我们的 pom.xml 中。

最后,我们可以使用 PngOptimizer 类来压缩 PNG 文件。

我们使用 optimize() 方法让库决定最佳压缩。由于是有损压缩,很难显著减小图像大小。在这里,我们将大小从 500 KB 减小到 481 KB。

PNGOptimizationExample.java

输出

PNG optimization completed.

结论

我们已经介绍了使用 Java 的两种有损压缩方法:内置的 Java Image I/O API 和 Apache Commons Imaging 库。然后,我们使用 Pngtastic 库对 PNG 图像进行无损压缩。