Java DIP - Görüntü Sıkıştırma Tekniği

Bir görüntü, Java aracılığıyla kolayca sıkıştırılabilir ve saklanabilir. Görüntünün sıkıştırılması, bir görüntünün jpg'ye dönüştürülmesini ve saklanmasını içerir.

Bir görüntüyü sıkıştırmak için görüntüyü okur ve BufferedImage nesnesine dönüştürürüz.

Ayrıca, bir ImageWriter alıyoruz. getImageWritersByFormatName()ImageIO sınıfında bulunan yöntem. Bu ImageWriter'dan birImageWriteParamnesne. Söz dizimi aşağıda verilmiştir -

Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg");
ImageWriteParam obj = writer_From_List.getDefaultWriteParam();

Bu ImageWriteParam nesnesinden, bu iki yöntemi çağırarak sıkıştırmayı ayarlayabilirsiniz. setCompressionMode() ve setCompressionQuality(). Sözdizimleri aşağıda verildiği gibidir -

obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
obj.setCompressionQuality(0.05f);

SetCompressionMode () yöntemi, parametre olarak Mode_EXPLICIT alır. Diğer MODLARIN bazıları kısaca açıklanmıştır -

Sr.No. Modları
1

MODE_DEFAULT

Bu özelliği gelecekteki yazmalar için etkinleştirmek üzere yöntemlere aktarılabilen sabit bir değerdir.

2

MODE_DISABLED

Gelecekteki yazma işlemleri için bu özelliği devre dışı bırakmak üzere yöntemlere geçirilebilecek sabit bir değerdir.

3

MODE_EXPLICIT

Bu özelliği gelecekteki yazmalar için etkinleştirmek üzere yöntemlere aktarılabilen sabit bir değerdir.

Sıkıştırma yöntemlerinden ayrı olarak, ImageWriteParam sınıfı tarafından sağlanan başka yöntemler vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

canOffsetTiles()

Yazar, yazarken sıfır olmayan ızgara ofsetleriyle döşeme yapabiliyorsa, true döndürür.

2

getBitRate(float quality)

Verilen kalite seviyesinde girdi görüntü verisinin her biti için çıktı verisinin bit sayısının tahminini gösteren bir kayan nokta döndürür.

3

getLocale()

Geçerli olarak ayarlanmış Yerel Ayarı döndürür veya yalnızca varsayılan bir Yerel Ayar destekleniyorsa null.

4

isCompressionLossless()

Geçerli sıkıştırma türü kayıpsız sıkıştırma sağlıyorsa true döndürür.

5

unsetCompression()

Önceki tüm sıkıştırma türlerini ve kalite ayarlarını kaldırır.

6

unsetTiling()

SetTiling çağrılarıyla belirtilen önceki tüm karo ızgarası parametrelerini kaldırır.

Misal

Aşağıdaki örnek, bir görüntüyü sıkıştırmak için ImageWriteParam sınıfının kullanımını gösterir -

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();
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, görüntüyü sıkıştırır digital_image_processing.jpg eşdeğer sıkıştırılmış görüntüsüne ve sabit diske adıyla yazar. compress.jpg.

Gerçek görüntü

Sıkıştırılmış Görüntü - Kalite Faktörü - 0,05

Sıkıştırılmış Görüntü - Kalite Faktörü - 0,5