Java DIP - 图像压缩技术


通过Java可以轻松地压缩和存储图像。图像压缩涉及将图像转换为 jpg 并存储。

为了压缩图像,我们读取图像并转换为 BufferedImage 对象。

此外,我们从ImageIO 类中的getImageWritersByFormatName()方法获取 ImageWriter 。从此 ImageWriter 创建一个ImageWriteParam对象。其语法如下 -

Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg");
ImageWriteParam obj = writer_From_List.getDefaultWriteParam();

从此 ImageWriteParam 对象中,您可以通过调用setCompressionMode()setCompressionQuality()这两个方法来设置压缩。它们的语法如下所示 -

obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
obj.setCompressionQuality(0.05f);

setCompressionMode() 方法以Mode_EXPLICIT 作为参数。简要描述了其他一些模式 -

先生。 模式
1

模式默认

它是一个常量值,可以传递到方法中以便为将来的写入启用该功能。

2

模式_禁用

它是一个常量值,可以传递到方法中以禁用该功能以便将来写入。

3

模式_显式

它是一个常量值,可以传递到方法中以便为将来的写入启用该功能。

除了压缩方法之外,ImageWriteParam 类还提供其他方法。它们被简要描述 -

先生。 方法及说明
1

canOffsetTiles()

如果写入器在写入时可以使用非零网格偏移执行平铺,则返回 true。

2

getBitRate(浮点质量)

它返回一个浮点值,指示给定质量级别下输入图像数据每一位的输出数据位数的估计值。

3

获取语​​言环境()

它返回当前设置的区域设置,如果仅支持默认区域设置,则返回 null。

4

isCompressionLossless()

如果当前压缩类型提供无损压缩,则返回 true。

5

取消设置压缩()

它会删除任何以前的压缩类型和质量设置。

6

取消设置平铺()

它会删除之前通过调用 setTiling 指定的所有图块网格参数。

例子

以下示例演示了如何使用 ImageWriteParam 类来压缩图像 -

import java.io.*;
import java.util.*;
import java.awt.image.*;

import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;

class Compression {

   public static void main(String[] args) throws IOException {
   
      File input = new File("digital_image_processing.jpg");
      BufferedImage image = ImageIO.read(input);

      File compressedImageFile = new File("compress.jpg");
      OutputStream os =new FileOutputStream(compressedImageFile);

      Iterator<ImageWriter>writers =  ImageIO.getImageWritersByFormatName("jpg");
      ImageWriter writer = (ImageWriter) writers.next();

      ImageOutputStream ios = ImageIO.createImageOutputStream(os);
      writer.setOutput(ios);

      ImageWriteParam param = writer.getDefaultWriteParam();
      
      param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
      param.setCompressionQuality(0.05f);
      writer.write(null, new IIOImage(image, null, null), param);
      
      os.close();
      ios.close();
      writer.dispose();
   }
}

输出

当您执行给定的代码时,它将图像digital_image_processing.jpg压缩为其等效的压缩图像,并将其写入硬盘上,名称为compress.jpg

原始图像

图像压缩技术教程

压缩图像 - 质量因数 − 0.05

图像压缩技术教程

压缩图像 - 质量因数 − 0.5

图像压缩技术教程