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 作为参数。简要描述了其他一些模式 −
Sr.No. | 模式 |
---|---|
1 |
MODE_DEFAULT 它是一个常量值,可以传递到方法中以启用该功能以供将来写入。 |
2 |
MODE_DISABLED 它是一个常量值,可以传递到方法中以禁用该功能以供将来写入。 |
3 |
MODE_EXPLICIT 这是一个常量值,可以传递到方法中以启用该功能以供将来写入。 |
除了压缩方法之外,ImageWriteParam 类还提供了其他方法。它们简要描述 −
Sr.No. | 方法 &描述 |
---|---|
1 |
canOffsetTiles() 如果写入器在写入时可以执行具有非零网格偏移的平铺,则返回 true。 |
2 |
getBitRate(float quality) 返回一个浮点数,表示给定质量级别下输入图像数据的每一位输出数据的位数估计值。 |
3 |
getLocale() 返回当前设置的 Locale,如果只有默认 Locale,则返回 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。
原始图像

压缩图像 - 质量因子 − 0.05

压缩图像 - 质量因子 − 0.5
