Учебники

Java DIP — метод сжатия изображений

Изображение может быть легко сжато и сохранено через Java. Сжатие изображения включает в себя преобразование изображения в JPG и сохранение его.

Чтобы сжать изображение, мы читаем изображение и конвертируем в объект BufferedImage.

Далее, мы получаем ImageWriter из метода getImageWritersByFormatName (), найденного в классе ImageIO. Из этого 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

Это постоянное значение, которое можно передать в методы, чтобы включить эту функцию для будущих записей.

MODE_DEFAULT

Это постоянное значение, которое можно передать в методы, чтобы включить эту функцию для будущих записей.

MODE_DISABLED

Это постоянное значение, которое можно передать в методы, чтобы отключить эту функцию для будущих записей.

MODE_EXPLICIT

Это постоянное значение, которое можно передать в методы, чтобы включить эту функцию для будущих записей.

Помимо методов сжатия существуют другие методы, предоставляемые классом ImageWriteParam. Они описаны кратко —

Sr.No. Метод и описание
1

canOffsetTiles ()

Он возвращает true, если писатель может выполнять мозаику с ненулевыми смещениями сетки во время записи.

2

getBitRate (качество с плавающей точкой)

Он возвращает число с плавающей запятой, указывающее оценку количества битов выходных данных для каждого бита данных входного изображения на данном уровне качества.

3

GetLocale ()

Возвращает текущую установленную локаль или ноль, если поддерживается только локаль по умолчанию.

4

isCompressionLossless ()

Возвращает true, если текущий тип сжатия обеспечивает сжатие без потерь.

5

unsetCompression ()

Он удаляет любой предыдущий тип сжатия и настройки качества.

6

unsetTiling ()

Он удаляет все предыдущие параметры мозаичной сетки, указанные в вызовах setTiling.

canOffsetTiles ()

Он возвращает true, если писатель может выполнять мозаику с ненулевыми смещениями сетки во время записи.

getBitRate (качество с плавающей точкой)

Он возвращает число с плавающей запятой, указывающее оценку количества битов выходных данных для каждого бита данных входного изображения на данном уровне качества.

GetLocale ()

Возвращает текущую установленную локаль или ноль, если поддерживается только локаль по умолчанию.

isCompressionLossless ()

Возвращает true, если текущий тип сжатия обеспечивает сжатие без потерь.

unsetCompression ()

Он удаляет любой предыдущий тип сжатия и настройки качества.

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 .