Programmatisch Reduzierung der JPEG-Dateigröße

8

Entschuldigung für jede Ignoranz, aber ich habe noch nie mit JPEG-Bildern (geschweige denn allen Arten von Bildern) in Java gearbeitet.

Angenommen, ich möchte ein JPEG-Bild von einem Webdienst an einen Client senden. Gibt es eine Möglichkeit, dass ich die Größe der JPEG-Datei reduzieren kann, indem ich das Farbprofil des Bildes irgendwie manipuliere?

Ich war bereits in der Lage, die Bildgröße zu reduzieren, indem ich sie mit einem übersichtlichen Tool für BufferedImages namens imgscalr skalierte. Siehe hier .

Ich möchte auch ein JPEG, das weniger Farben hat als ein hochwertiges JPEG-Bild. Zum Beispiel möchte ich in der Lage sein, 8-Bit-Farbe in meinem JPEG anstelle von sagen 16-Bit-Farbe zu verwenden.

Was genau müsste ich ändern, wenn ich ein BufferedImage aus dem Java-2D-Paket habe?

    
Joeblackdev 26.07.2011, 13:09
quelle

4 Antworten

4

Eine weitere Möglichkeit, die Bildgröße zu reduzieren, besteht darin, die Komprimierungsstufe zu ändern. Sie können dies mit ImageWriter tun.

%Vor%     
Lev Khomich 26.07.2011, 13:30
quelle
1

Am einfachsten ist es, den Byte-Stream in ein Java-Image zu dekomprimieren, optional zu verkleinern (was ihn kleiner macht) und dann ein JPEG-Bild mit der gewünschten Qualitätseinstellung neu zu generieren.

Dieses neue Bild wird dann an den Client gesendet.

    
quelle
1

Sehen Sie sich die Klasse ImageIO an. Zum Verringern der Dateigröße: Da das Bild bereits ein JPEG ist, können Sie nur die Qualität oder die Bildgröße reduzieren.

Noch etwas, das Sie beachten sollten: Wenn das Bild ein CMYK-JPEG ist, könnte es größer sein. Leider kann ImageIO nicht mit diesen umgehen, aber Sie können versuchen, JAI ImageIO von CMYK in RGB zu konvertieren (was viel kleiner sein sollte).

    
Thomas 26.07.2011 13:21
quelle
1

Zwei der möglichen Lösungen verkleinern das Bild, hier ist, wie Sie es tun würden:

%Vor%

Natürlich müssen Sie die skalierte Breite und Höhe berechnen, damit das Bild im selben Seitenverhältnis bleibt.

Nachdem Sie es verkleinert haben, können Sie dieses Bild nun in eine JPEG-Datei umwandeln:

%Vor%

Diese Klassen stammen aus dem Paket JAI (genauer gesagt com.sun.image.codec.jpeg ) und die JVM könnte sich beschweren, dass sie nicht direkt verwendet werden sollten. aber du kannst das ignorieren.

Sie können möglicherweise JAI von hier herunterladen, wenn dies der Fall ist nicht funktionieren Ich habe Github-Spiegel-Setup für die beiden Bibliotheken JAI-Kern und JAI ImageIO .

    
Maurício Linhares 26.07.2011 13:31
quelle

Tags und Links