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
廣告
© . All rights reserved.