Skip to content

Reduzieren der Dateigröße sehr großer Bilder, ohne die Bildabmessungen zu ändern

Lösung:

PNG ist kein verlustbehaftetes Bildformat, daher müssen Sie das Bild wahrscheinlich in ein anderes Format konvertieren – höchstwahrscheinlich in JPEG. JPEG hat einen einstellbaren "Qualitätsfaktor" - Sie können den Qualitätsfaktor einfach weiter reduzieren, bis Sie ein Bild erhalten, das klein genug ist. All dies kann ohne Änderung der Bildauflösung erfolgen.

Je nach Bild kann der Verlust an visueller Qualität natürlich erheblich sein. JPEG eignet sich am besten für "echte" Bilder, z. B. Bilder von Kameras. Es funktioniert nicht so gut für Logos, Screenshots oder andere Bilder mit "scharfen" Übergängen von hell nach dunkel. (PNG hingegen hat das gegenteilige Verhalten – es ist am besten für Logos usw.)

Bei 800x600 wird es jedoch wahrscheinlich sehr einfach sein, ein JPEG unter 1 MB zu bekommen. (Ich wäre sehr überrascht, eine 30-MB-Datei mit diesen geringen Abmessungen zu sehen.) Tatsächlich sogar unkomprimiert, das Bild wäre nur etwa 1,4 MB groß:

800 pixels * 600 pixels * 3 Bytes / color = 1,440,000 Bytes = 1.4MB

Daher benötigen Sie nur ein Kompressionsverhältnis von 1,4:1, um das Bild auf 1 MB zu reduzieren. Abhängig von der Art des Bildes kann die PNG-Komprimierung dieses Komprimierungsniveau sehr gut bereitstellen. Wenn nicht, könnte JPEG mit ziemlicher Sicherheit – JPEG-Kompressionsraten in der Größenordnung von 10:1 sind keine Seltenheit. Auch hier hängt die Qualität/Größe der Ausgabe von der Art des Bildes ab.

Obwohl ich ImageMagick seit einiger Zeit nicht mehr verwendet habe, bin ich mir fast sicher, dass es Optionen gibt, um ein Bild mit einem bestimmten Qualitätsfaktor neu zu komprimieren. Lesen Sie die Dokumentation durch und experimentieren Sie!

EDIT: Sieht so aus, als ob es mit ImageMagick in der Tat ziemlich einfach sein sollte. Aus den Dokumenten:

$magick> convert input.png -quality 75 output.jpg

Spielen Sie einfach mit dem Qualitätswert, bis Sie eine geeignete Ausgabe erhalten.

Ihr Beispiel ist problematisch, da ein 30 MB-Bild mit einer Auflösung von 800 x 600 gespeichert wird 500 Bit pro Pixel. Offensichtlich völlig unrealistisch. Bitte geben Sie uns echte Zahlen an.

In der Zwischenzeit würde ich den "billigen und fröhlichen" Ansatz wie folgt versuchen: Verkleinern Sie das Bild um den Faktor 6, skalieren Sie es dann wieder um den Faktor 6 und führen Sie es dann durch die PNG-Komprimierung. Wenn Sie Glück haben, reduzieren Sie die Bildgröße um den Faktor 36. Wenn Sie Pech haben, beträgt die Ersparnis eher 6.

pngtopng big.png | pnmscale -reduce 6 | pnmscale 6 | pnmtopng > big.png

Wenn das nicht genug ist, können Sie werfen ppmquant in der Mitte (auf dem kleinen Bild), um die Anzahl der Farben zu reduzieren. (Die Beispiele sind netpbm/pbmplus, die ich immer verständlicher fand als ImageMagick.)

Um zu wissen, ob eine solche Lösung sinnvoll ist, müssen wir die wahren Zahlen Ihres Problems kennen.

Wenn Sie die Informationen wirklich dauerhaft wegwerfen, sind Sie mit ziemlicher Sicherheit besser dran, die JPEG-Komprimierung zu verwenden, die darauf ausgelegt ist, Informationen einigermaßen anmutig zu verlieren. Gibt es einen Grund, warum JPEG für Ihre Anwendung nicht geeignet ist?

Da die Größe einer Bilddatei direkt mit den Bildabmessungen und der Anzahl der Farben zusammenhängt, haben Sie anscheinend nur eine Wahl: die Anzahl der Farben reduzieren.

Und ~30 MB auf 1 MB ist a sehr große Reduzierung.

Dieses Verhältnis wäre mit einer Umstellung auf Monochrom nur schwer zu erreichen.

Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.