Frage

Der Titel sagt genug, denke ich. Ich habe eine volle Qualität BufferedImage und ich mag es durch einen Outputstream senden mit einem niedrigen bitdepth. Ich habe keinen Algorithmus will die Qualität Pixel für Pixel zu ändern, so ist es immer noch eine volle Qualität.

So ist es das Ziel, das Bild zu schreiben (mit der vollen Auflösung, in voller Größe) durch die OuputStream, die eine sehr kleine Anzahl von Bytes nimmt zu schreiben.

Danke,
Martijn

War es hilfreich?

Lösung

Sie müssen die Bilddaten in das Format kodieren, die die richtigen Eigenschaften für Ihr Bild hat. Wenn es 24-Bit-Farbe ist und viele Farben hat, und Sie wollen keine Qualität verlieren, sind Sie wahrscheinlich mit PNG stecken, aber schauen Sie in lossless JPEG 2000.

Wenn Sie einige Qualität verlieren, dann versuchen

  1. Lossy JPEG 2000 - viel kleiner als JPEG für den gleichen Qualitätsverlust
  2. die Anzahl der Farben zu reduzieren und eine Farbe zugeordnet Format mit

Wenn das Bild nur grau oder schwarz-weiß-Daten hat, stellen Sie sicher, dass Sie es als solche (8-Bit-Grau oder 1-Bit-schwarz und weiß) codieren. Dann stellen Sie sicher, dass Sie einen Encoder verwenden, die für diese Art von Format (zB TIFF mit der Gruppe 4 oder JBIG2).

abgestimmt ist

Eine weitere gute Möglichkeit ist, alle unerwünschten Meta-Daten aus dem Bild zu entfernen (oder stellen Sie sicher, dass Ihr Encoder nicht in nicht gesetzt).

Wenn Sie mit halten wollen, was in Java, werden Sie wahrscheinlich TIFF verwenden, PNG oder JPEG - es gibt Drittbild endcoders (zum Beispiel meiner Firma, Atalasoft , eine .NET-Version dieser erweiterten Encoder macht - es gibt Java-Anbieter da draußen als auch)

Zur Info: Reduzierung Bittiefe in der Regel bedeutet Qualität zu reduzieren (es sei denn, die Reduktion ist bedeutungslos). Zum Beispiel, wenn ich ein 24-Bit-Farbbild, aber alle Farben sind grau (wobei R == == G B), dann reduziert auf 8-Bit-Grau Qualität nicht verlieren. Dies gilt auch, wenn Ihr Bild jede Sammlung von 256 verschiedenen Farben hat und wechseln Sie auf eine Farbe zugeordnet (indexiert oder paletti) Format. Sie reduzieren die Anzahl von Bytes und nicht Qualität reduzieren.

Andere Tipps

Haben Sie einen Blick auf die java.util.zip Paket für alle über Kompression:

http://java.sun.com/developer/technicalArticles/Programming/ Kompression /

Obwohl JPEG und PNG sind schon irgendwie komprimiert, die Inflater Klasse verwenden, können Sie Byteanzahl reduzieren, während die genau die gleiche Qualität des Bildes erhalten bleibt. ein bereits komprimiertes Format komprimieren ist in der Regel nicht von Bedeutung. Wenn Sie gruppieren mehrere Bilder, aber sie aufzublasen signifikant ist (da Techniken Inflation gemeinsame Muster in Objektdaten erkennen, die Wiederholung zu reduzieren und somit Byteanzahl reduziert).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top