it-swarm.com.de

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

Ziehen Sie eine Anwendung in Betracht, die das Hochladen möglicherweise sehr großer PNG-Dateien behandelt. 

Alle hochgeladenen Dateien müssen für einen späteren Abruf auf der Festplatte gespeichert werden. Die PNG-Dateien können jedoch eine Größe von bis zu 30 MB haben, die Speichergrenzen für Festplatten sind jedoch maximal 1 MB pro Dateigröße.

Das Problem besteht darin, eine Eingabe-PNG-Datei mit einer Dateigröße von bis zu 30 MB aufzunehmen und eine Ausgabe-PNG-Datei mit einer Dateigröße von weniger als 1 MB zu erzeugen.

Dieser Vorgang ist offensichtlich verlustbehaftet - und die Verringerung der Bildqualität, der Farben usw. ist kein Problem. Eine Sache, die jedoch nicht geändert werden muss, ist die Bildgröße. Daher muss eine Eingabedatei der Dimension 800x600 eine Ausgabedatei der Dimension 800x600 erzeugen.

Die oben genannten Anforderungen sind streng und können nicht geändert werden.

Verwenden Sie ImageMagick (oder ein anderes Open-Source-Tool). Wie würden Sie die Dateigröße von PNG-Eingabedateien der Größe ~ 30 MB auf maximal 1 MB pro Datei reduzieren, ohne die Bildmaße zu ändern?

29
knorv

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

Offensichtlich kann der Verlust an visueller Qualität abhängig vom Bild erheblich sein. JPEG eignet sich am besten für "True Life" -Bilder, z. B. Bilder von Kameras. Bei Logos, Bildschirmfotos oder anderen Bildern mit "scharfen" Übergängen von hell nach dunkel ist dies nicht so gut. (PNG hingegen hat das gegenteilige Verhalten - am besten für Logos usw.)

Bei 800 x 600 wird es jedoch sehr leicht sein, ein JPEG-Format unter 1 MB zu erhalten. (Ich wäre sehr überrascht, eine 30-MB-Datei mit diesen kleinen Abmessungen zu sehen.) Selbst unkomprimiert würde das Bild nur etwa 1,4 MB betragen:

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

Daher benötigen Sie nur eine Komprimierungsrate von 1,4: 1, um das Bild auf 1 MB zu bringen. Abhängig von der Art des Bildes kann die PNG-Komprimierung diese Komprimierungsstufe durchaus bereitstellen. Wenn nicht, könnte JPEG fast sicher-- JPEG-Kompressionsverhältnisse in der Größenordnung von 10: 1 sind keine Seltenheit. Wieder 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 fast sicher, dass es Möglichkeiten gibt, ein Bild mit einem bestimmten Qualitätsfaktor erneut zu komprimieren. Lesen Sie die Dokumente durch und beginnen Sie mit dem Experimentieren!

BEARBEITEN: Sieht so aus, als sollte es mit ImageMagick ziemlich einfach sein. Aus den docs :

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

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

40
Eric Pi

Ihr Beispiel ist problematisch, da ein 30 MB großes Bild mit einer Auflösung von 800 x 600 500 Bits pro Pixel speichert. Natürlich unrealistisch. Bitte geben Sie uns echte Zahlen.

In der Zwischenzeit würde ich den Ansatz "billig und fröhlich" wie folgt versuchen: Verkleinern Sie das Bild um den Faktor 6, vergrößern Sie es dann um den Faktor 6, und führen Sie dann die PNG-Komprimierung durch. Wenn Sie Glück haben, reduzieren Sie die Bildgröße um den Faktor 36. Wenn Sie Pech haben, werden die Einsparungen eher wie 6 sein.

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

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

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

Wenn Sie die Informationen wirklich dauerhaft wegwerfen möchten, ist die Verwendung der JPEG-Komprimierung mit Sicherheit eine bessere Lösung, da sie dazu führt, dass Informationen vernünftig verloren gehen. Gibt es einen Grund, warum JPEG für Ihre Anwendung nicht geeignet ist?

7
Norman Ramsey

Es hängt viel davon ab, was Sie am Ende wollen. Ich mag es oft, die Anzahl der Farben zu reduzieren, während die Größe erhalten bleibt. In vielen Fällen spielen die reduzierten Farben keine Rolle. Hier ist ein Beispiel für die Reduzierung der Farben auf 254. 

convert -colors 254 in.png out.png
3
esse

Da die Größe einer Bilddatei direkt von den Bildabmessungen und der Anzahl der Farben abhängt, haben Sie scheinbar nur eine Wahl: Reduzieren Sie die Anzahl der Farben.

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

Es ist schwierig, dieses Verhältnis bei einer Umwandlung in Monochrom zu erreichen.

3
pavium

Sie können das Dienstprogramm pngquant versuchen. Es ist sehr einfach zu installieren und zu verwenden. Und es kann Ihre PNGs ohne sichtbaren Qualitätsverlust stark komprimieren.

Sobald Sie es installiert haben, versuchen Sie es so:

pngquant yourfile.png
pngquant --quality=0-70 yourfile.png

Für mein Demo-Image (erzeugt mit Imagemagick) reduziert der erste Befehl 350 KB auf 110 KB und der zweite Befehl auf 65 KB.

2
  • Schritt 1: Verkleinern Sie das Bild auf 1/16 der Originalgröße.
  • Schritt 2: Verringern Sie die Anzahl der Farben.
  • Schritt 3: Erhöhen Sie die Größe des Bildes wieder auf die ursprüngliche Größe. 
1
pieter

Ich weiß, dass Sie die Pixelgröße beibehalten möchten. Können Sie die Pixelgröße jedoch reduzieren und die im Bild gespeicherte DPI anpassen, damit die Anzeigegröße erhalten bleibt? Es hängt davon ab, welchen Client Sie zum Anzeigen der Bilder verwenden, die meisten sollten dies jedoch beachten. Wenn Sie die Bilder im Web verwenden, können Sie einfach die Pixelgröße des <img>-Tags festlegen.

0
Lou Franco

Versuchen Sie ImageOptim https://imageoptim.com/mac es ist kostenlos und Open Source

0
Jerry T

Wenn Sie die Bildgröße in Ubuntu ändern möchten, können Sie "gimp" ..__ versuchen. Ich habe einige Bildbearbeitungs-Apps in Ubuntu ausprobiert, und dies schien der beste unter ihnen zu sein.

WIE INSTALLIERT MAN?

- Terminal öffnen

-type: Sudo apt-get install gimp-plugin-register

-Admin Passwort vergeben. Sie brauchen dafür eine Netzverbindung.

-Nach der Installation öffnen Sie das Bild mit dem GIMP-Bildeditor. Dann gehe zu: Datei> Exportieren als> Klicke auf 'Exportieren' 

- Sie erhalten ein kleines Fenster, in dem das Kontrollkästchen "Vorschau im Bildfenster anzeigen" angezeigt wird. Wenn Sie diese Option aktivieren, wird die aktuelle Größe der Datei zusammen mit der Qualitätsstufe angezeigt.

- Passen Sie die Qualitätsstufe an, um die Dateigröße zu erhöhen/verringern.

-Nachdem Sie die Einstellungen vorgenommen haben, klicken Sie auf 'Export', um die Datei zu speichern.

0
InuYasha

verwenden Sie optipng, um die Größe ohne Verlust zu reduzieren

http://optipng.sourceforge.net/

0
JulienGenoud

Es hängt von der Art des Bildes ab, ob es sich um ein reales Bild oder ein vom Computer generiertes Bild handelt. Für echte Bilder wird png sehr wenig tun, da es möglicherweise sogar überhaupt nicht komprimiert wird. Verwenden Sie jpg für diese Bilder begrenzte Anzahl verschiedener Farben (es kann eine Bildtiefe von 24 Bit haben, aber die Anzahl der eindeutigen Bilder ist gering). png kann ziemlich gut komprimiert werden. png ist im Grunde eine Implementierung von Zip für Bilder, also, wenn viele Pixel vorhanden sind Sie können auch eine ziemlich gute Komprimierungsrate haben. Wenn Sie eine verlustfreie Komprimierung benötigen, ändern Sie die Größe nicht.

0
just a guest