Python-Bildbibliothek (PIL), wie wird das Bild in die gewünschte Dateigröße komprimiert?

8

Ich habe eine Anforderung, alle hochgeladenen Bilder mit weniger als 500kb Dateigröße zu komprimieren, ich habe auf Google gesucht und alles, was ich sehen kann, ist:

%Vor%

Wenn ich mit diesem Ansatz gehe, muss ich prüfen, ob das Bild weniger als 500 kb nach der Komprimierung ist, wenn nicht, dann gehe für niedrigere Qualität und Größe.

Gibt es einen besseren Weg?

    
James Lin 15.11.2012, 22:56
quelle

2 Antworten

9

JPEG-Komprimierung ist vorher nicht vorhersehbar. Die von Ihnen beschriebene Methode compress & amp; messen & amp; versuche es noch einmal, ist der einzige Weg, den ich kenne.

Sie können versuchen, eine Reihe von typischen Bildern mit unterschiedlichen Qualitätseinstellungen zu komprimieren, um eine Vorstellung von dem optimalen Startpunkt zu erhalten. Außerdem können Sie erraten, wie sich Änderungen an der Einstellung auf die Größe auswirken. Das bringt Sie auf die optimale Größe ohne zu viele Iterationen.

Sie können auch ein dateiähnliches Objekt an die Funktion save übergeben, die nicht auf die Festplatte schreibt, sondern nur die Bytes zählt. Sobald Sie die besten Einstellungen festgelegt haben, können Sie sie erneut in einer Datei speichern.

Edit: Hier ist eine Implementierung eines geeigneten Bytezählungs-Dateiobjekts. Überprüfen Sie size nach dem Speichern.

%Vor%

Edit 2: Hier ist eine binäre Suche mit den oben genannten, um die optimale quality in der kleinsten Anzahl von Versuchen zu erhalten.

%Vor%     
Mark Ransom 15.11.2012, 23:08
quelle
3

Ich schätze, ich werde meinen Code hier zur Verfügung stellen, so dass es hilfreich sein könnte, wenn jemand das gleiche Problem hat

%Vor%

Ссылка

    
James Lin 19.11.2012 23:49
quelle

Tags und Links