- Java 数字图像处理
- 数字图像处理 - 首页
- 数字图像处理 - 简介
- 数字图像处理 - Java BufferedImage 类
- 数字图像处理 - 图片下载与上传
- 数字图像处理 - 图像像素
- 数字图像处理 - 灰度转换
- 数字图像处理 - 增强图像对比度
- 数字图像处理 - 增强图像亮度
- 数字图像处理 - 增强图像锐度
- 数字图像处理 - 图像压缩技术
- 数字图像处理 - 添加图像边框
- 数字图像处理 - 图像金字塔
- 数字图像处理 - 基本阈值分割
- 数字图像处理 - 图像形状转换
- 数字图像处理 - 高斯滤波器
- 数字图像处理 - 方框滤波器
- 数字图像处理 - 腐蚀与膨胀
- 数字图像处理 - 水印
- 数字图像处理 - 卷积理解
- 数字图像处理 - Prewitt 算子
- 数字图像处理 - Sobel 算子
- 数字图像处理 - Kirsch 算子
- 数字图像处理 - Robinson 算子
- 数字图像处理 - Laplacian 算子
- 数字图像处理 - 加权平均滤波器
- 数字图像处理 - 创建缩放效果
- 数字图像处理 - 开源库
- 数字图像处理 - OpenCV 简介
- 数字图像处理 - OpenCV 灰度转换
- 数字图像处理 - 颜色空间转换
- 数字图像处理 - 有用资源
- 数字图像处理 - 快速指南
- 数字图像处理 - 有用资源
- 数字图像处理 - 讨论
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。