Java 数字图像处理 - 图像压缩技术



图像可以通过 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

MODE_DEFAULT

这是一个常量值,可以将其传递给方法以启用该功能以供将来的写入使用。

2

MODE_DISABLED

这是一个常量值,可以将其传递给方法以禁用该功能以供将来的写入使用。

3

MODE_EXPLICIT

这是一个常量值,可以将其传递给方法以启用该功能以供将来的写入使用。

除了压缩方法外,ImageWriteParam 类还提供了其他方法。它们简要描述如下:

序号 方法和描述
1

canOffsetTiles()

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

2

getBitRate(float quality)

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

3

getLocale()

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

4

isCompressionLossless()

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

5

unsetCompression()

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

6

unsetTiling()

它删除之前通过调用 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

原始图像

Image Compression Technique Tutorials

压缩图像 - 质量因子 - 0.05

Image Compression Technique Tutorials

压缩图像 - 质量因子 - 0.5

Image Compression Technique Tutorials
广告