- 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。
原始影像
壓縮影像 - 質量因子 - 0.05
壓縮影像 - 質量因子 - 0.5