Kompresja obrazu w javie

Jest wiele metod kompresji, wiele różnych algorytmów, które to wykonują. Oczywiście, można samemu napisać kompresję obrazu ale czy warto, skoro można skorzystać z gotowych rozwiązań. W javie z pomocą idą nam klasy z pakietu javax.imageio i przykładowy kod może wyglądać następująco.

private void compress(BufferedImage image, File file, float compressionLevel) {
   ImageWriter writer = null;
   Iterator iterator = ImageIO.getImageWritersByFormatName("jpg");
   if (iterator.hasNext()) {
      writer = (ImageWriter) iterator.next();
   }
   ImageOutputStream ios = null;

   ios = ImageIO.createImageOutputStream(file);
   writer.setOutput(ios);

   ImageWriteParam imageWriteParam = writer.getDefaultWriteParam();
   imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
   imageWriteParam.setCompressionQuality(compressionLevel);

   writer.write(null, new IIOImage(image, null, null), imageWriteParam);

   ios.flush();
   writer.dispose();
   ios.close();

} 

Ta metoda za parametry przyjmuje:

  • obraz, kt6ry będzie kompresowany
  • plik, do którego będzie zapisany skompresowany wynik
  • oraz stopień kompresji. Współczynnik ten przyjmuje wartości od 0.0 do 1.0. Im niższy tym rozmiar pliku jest mniejszy ale jednocześnie gorsza jakość.

A kod początkowo pobiera writera dla odpowiedniego typu – jpg i ustawia odpowiedni outputStream, ustawia jego parametry i dokonuje kompresji. Oczywiście nie należy zapominać o obsłudze wyjątków, które tutaj są pominięte.

%d blogerów lubi to: