![So konvertieren Sie eine 32 MB große PNG-Datei in eine 200 KB große Datei, ohne dass die Farben verloren gehen](https://rvso.com/image/1070945/So%20konvertieren%20Sie%20eine%2032%20MB%20gro%C3%9Fe%20PNG-Datei%20in%20eine%20200%20KB%20gro%C3%9Fe%20Datei%2C%20ohne%20dass%20die%20Farben%20verloren%20gehen.png)
Ich habe einige Bilder mit einer Größe von 32 MB und möchte ihre Größe von 32 MB auf 100 KB oder eine beliebige KB-Größe ändern, ohne die Farben zu beeinträchtigen.
Die Befehle, die ich versuche, sind:
muhammad@muhammad-mohsin:~/scans$ find . -iname '*.png' -exec mogrify -format jpg "*.png" {} +
muhammad@muhammad-mohsin:~/$ find . -type f -iname \*.png -delete
muhammad@muhammad-mohsin:~/$ find . -iname '*.jpg' -exec mogrify -define jpeg:extent=300kb -strip -quality 90 -scale 90% *.jpg {} +
Hier konvertiere ich zuerst ein PNG in ein JPG, wodurch seine Größe von 32 MB auf 5,8 MB reduziert wird, und alles bleibt gleich, aber wenn ich den dritten Befehl verwende, wird die Hintergrundfarbe im Bild entfernt und es wird in Graustufen unscharf.
Der Text ist zwar noch lesbar, die Farben und das Hintergrundlogo jedoch nicht.
Wie kann ich dies mit Convert, Mogrify oder einem anderen Tool erreichen? Ich habe bisher alles Mögliche versucht.
Antwort1
Das liegt an der Funktionsweise der JPEG-Komprimierung. Sie versucht, benachbarte Pixel, die einander ähnlich sind, auf ähnliche Werte zu runden. Dies führt zu Detailverlusten und Blockbildung.
Dies wird deutlicher, wenn Sie den Komprimierungsgrad erhöhen.genauwas du tust. Außerdem machst du es in zwei Schritten:
- Verlustfreie (PNG) zu verlustbehafteter (JPEG) Komprimierung.
- Verlustbehaftete zu verlustbehafteter Komprimierung.
Du wirstwahrscheinlichSie erzielen ein besseres Ergebnis, indem Sie in der Endqualität von verlustfrei auf verlustbehaftet wechseln und die verlustbehaftete Komprimierung somit nur einmal anwenden, z. B. jpeg:extent=300kb -strip -quality 90 -scale 90%
bei der ersten Konvertierung.
Darüber hinaus sagen Sie nichts über die Größe des Bildes und den Detailgrad. Es ist möglicherweise nicht möglich, es auf 300 kB zu reduzieren und dabei die gewünschte Qualität beizubehalten.
Um Hintergrundflecken zu entfernen, können Sie versuchen, in einer Bildbearbeitungssoftware Schwellenwerte auf Ihr Dokument anzuwenden, sodass beispielsweise alles unter einem bestimmten Grauton weiß dargestellt wird.
Was auch immer Sie tun, die Komprimierung von einem verlustfreien 30-MB-Format in ein verlustbehaftetes 300-KB-FormatWillezu sichtbaren Qualitätseinbußen führen.
Antwort2
Ich versuche es
find . -iname '*.png' -exec convert -resize 60% -quality 60 "*.jpg" {} +
, aber das funktioniert nicht.
Art.-Nr.https://superuser.com/questions/71028/batch-converting-png-to-jpg-in-linux
$ ls -1 *.png | xargs -n 1 bash -c 'convert -quality 60 "$0" "${0%.*}.jpg"'
Konvertiert mein Beispiel 31MB.png in 1,4MB.jpg. … Möglicherweise müssen Sie dies mit zB $ ls -1 *.PNG | ...
usw. wiederholen.
Siehe Kommentar von @steeldriver: „etwas besser ist xargs -d '\n' -n 1
“