Heim >Java >javaLernprogramm >Wie steuere ich die JPEG-Komprimierungsstufe mit ImageIO in Java?

Wie steuere ich die JPEG-Komprimierungsstufe mit ImageIO in Java?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 04:28:30464Durchsuche

How to Control JPEG Compression Level Using ImageIO in Java?

Einstellen der JPEG-Komprimierungsstufe mit ImageIO in Java

In Java ist ImageIO eine vielseitige Bibliothek zur Bildbearbeitung. Es fehlt jedoch eine explizite Methode zum Festlegen der JPEG-Komprimierungsstufe beim Schreiben von Bildern. In diesem Artikel wird diese Einschränkung behoben, indem gezeigt wird, wie die Komprimierungsqualität mithilfe der ImageIO-API angepasst wird.

Lösung

Um die JPEG-Komprimierung zu steuern, besteht ein Ansatz darin, die ImageWriteParam-Klasse zu verwenden. Die folgenden Schritte beschreiben den Prozess:

  1. Erhalten Sie das ImageWriter-Objekt für das JPEG-Format.
  2. Rufen Sie das Standard-ImageWriteParam für den ImageWriter ab.
  3. Stellen Sie den Komprimierungsmodus auf ein ImageWriteParam.MODE_EXPLICIT.
  4. Geben Sie die gewünschte Komprimierungsqualität zwischen 0,0f (maximale Komprimierung) und 1,0f (maximale Qualität) an.
  5. Erstellen Sie einen ImageOutputStream, um die Ausgabe zu verarbeiten.
  6. Legen Sie die ImageWriter-Ausgabe auf den ImageOutputStream fest.
  7. Erstellen Sie ein IIOImage-Objekt mit den Bilddaten.
  8. Schreiben Sie das IIOImage mit dem benutzerdefinierten ImageWriteParam in den ImageOutputStream.
  9. Entsorgen Sie den ImageWriter .

Beispielcode:

<code class="java">ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam();
jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpgWriteParam.setCompressionQuality(0.7f);

ImageOutputStream outputStream = new FileImageOutputStream(new File("output.jpg"));
jpgWriter.setOutput(outputStream);
IIOImage outputImage = new IIOImage(image, null, null);
jpgWriter.write(null, outputImage, jpgWriteParam);
jpgWriter.dispose();</code>

Dieses Code-Snippet setzt die Komprimierungsqualität explizit auf 0,7 und erzeugt so ein Bild mit einem Gleichgewicht zwischen Qualität und Dateigröße .

Hinweis:

Die Beispiele gehen von der Existenz einer Bildvariablen und eines File-Objekts zum Schreiben der Ausgabe aus. Darüber hinaus ist die MemoryCacheImageOutputStream-Klasse eine Alternative zu FileImageOutputStream beim Schreiben in einen Speicherpuffer.

Das obige ist der detaillierte Inhalt vonWie steuere ich die JPEG-Komprimierungsstufe mit ImageIO in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn