Dies ist wirklich eine zweiteilige Frage, da ich noch nicht ganz verstehe, wie diese Dinge funktionieren:
Meine Situation: Ich schreibe eine Web-App, mit der der Benutzer ein Bild hochladen kann. Meine App ändert dann die Größe auf etwas Anzeigefähiges (z. B. 640 x 480) und speichert die Datei zur späteren Verwendung.
Meine Fragen:
- Ist es bei einer beliebigen JPEG-Datei möglich, die Qualitätsstufe zu bestimmen, damit ich beim Speichern des Bildes mit geänderter Größe dieselbe Qualität verwenden kann?
- Ist das überhaupt wichtig? Sollte ich alle Bilder unabhängig von der Originalqualität auf einem anständigen Niveau speichern (z. B. 75-80)?
Ich bin mir da nicht so sicher, denn wie ich es mir vorstelle: (Nehmen wir ein extremes Beispiel) Wenn jemand ein 5-Megapixel-Bild mit der Qualität 0 gespeichert hätte, wäre es wie alles andere blockig. Wenn die Bildgröße auf 640 x 480 reduziert wird, wird die Blockierung geglättet und kaum weniger ... bis ich sie wieder mit der Qualität 0 gespeichert habe ...
Wenn am anderen Ende des Spektrums ein Bild mit einer Größe von 800 x 600 und q = 0 vorhanden wäre, ändert die Größenänderung auf 640 x 480 nichts an der Tatsache, dass es wie völliger Mist aussieht. Daher wäre das Speichern mit q = 80 überflüssig.
Bin ich überhaupt in der Nähe?
Ich verwende die GD2-Bibliothek unter PHP, wenn dies von Nutzen ist
Antworten:
JPEG ist ein verlustbehaftetes Format. Jedes Mal, wenn Sie ein JPEG-Bild unabhängig von der Qualitätsstufe speichern, wird die tatsächliche Bildqualität verringert. Selbst wenn Sie eine Qualitätsstufe aus der Datei erhalten hätten, könnten Sie diese Qualität nicht beibehalten, wenn Sie ein JPEG erneut speichern (selbst bei Qualität = 100).
Sie sollten Ihr JPEG in einer Qualität speichern, die Sie sich in Bezug auf die Dateigröße leisten können. Oder verwenden Sie ein verlustfreies Format wie PNG.
JPEG-Dateien mit geringer Qualität werden nicht einfach blockiger. Stattdessen wird die Farbtiefe reduziert und die Details der Bildabschnitte werden entfernt. Sie können sich nicht darauf verlassen, dass Bilder mit geringerer Qualität blockartig sind und bei kleineren Größen gut aussehen.
Gemäß der JFIF-Spezifikation. Die Qualitätsnummer (0-100) wird nicht im Bildheader gespeichert, obwohl die horizontale und vertikale Pixeldichte gespeichert ist.
quelle
Sie können die Komprimierungsstufe mit ImageMagick anzeigen. Anweisungen zum Herunterladen und Installieren finden Sie auf der offiziellen Website .
Führen Sie nach der Installation den folgenden Befehl über die Befehlszeile aus:
Und Sie sollten den Wert von 0 (niedrige Qualität, kleine Dateigröße) bis 100 (hohe Qualität, große Dateigröße) erhalten.
Informationsquelle
quelle
identify -verbose
Ausgabe.Für zukünftige Besucher, die die Qualität eines bestimmten JPEGs überprüfen, können Sie einfach Imagemagick-Tools verwenden:
quelle
identity
ganze Zeit, aber nie mit der-verbose
Option. Sehr hilfreich.Der JPEG-Komprimierungsalgorithmus verfügt über einige Parameter, die die Qualität des Ergebnisbilds beeinflussen.
Einer dieser Parameter sind Quantisierungstabellen, die definieren, wie viele Bits für jeden Koeffizienten verwendet werden. Unterschiedliche Programme verwenden unterschiedliche Quatisierungstabellen.
Bei einigen Programmen kann der Benutzer die Qualitätsstufe 0-100 einstellen. Es gibt jedoch keine gemeinsame Verteidigung dieser Zahl. Das mit Photoshop mit 60% Qualität erstellte Bild benötigt 46 KB, während das mit GIMP erstellte Bild nur 26 KB benötigt.
Quantisierungstabellen sind ebenfalls unterschiedlich.
Es gibt andere Parameter wie Unterabtastung, DCT-Methode usw.
Sie können also nicht alle anhand einer einzelnen Qualitätsstufe beschreiben und die Qualität von JPEG-Bildern nicht anhand einer einzelnen Nummer vergleichen. Sie können jedoch eine solche Zahl wie Photoshop oder Gimp erstellen, die einen Kompromiss zwischen Größe und Qualität beschreibt.
Weitere Informationen: http://patrakov.blogspot.com/2008/12/jpeg-quality-is-meaningless-number.html
Es ist üblich, das Bild auf die entsprechende Größe zu ändern und danach JPEG anzuwenden. In diesem Fall haben große und mittlere Bilder die gleiche Größe und Qualität.
quelle
Da bereits zwei Antworten verwendet werden
identify
, gibt es hier eine, die auch den Dateinamen ausgibt (zum gleichzeitigen Scannen mehrerer Dateien) :Wenn Sie eine einfache Ausgabe
filename: quality
für mehrere Bilder wünschen , können Sie diese verwendenauf die Dateinamen + Komprimierung zeigt alle Dateien im aktuellen Verzeichnis.
quelle
Grundsätzlich gibt es zwei Fälle, die Sie interessieren:
Wenn für ein eingehendes Bild die Qualität zu hoch eingestellt ist, nimmt es möglicherweise unangemessen viel Platz ein. Daher möchten Sie beispielsweise das eingehende q = 99 auf q = 85 reduzieren.
Wenn für ein eingehendes Bild die Qualität zu niedrig eingestellt ist, kann es eine Platzverschwendung sein, die Qualität zu erhöhen. Abgesehen davon, dass ein Bild, bei dem eine große Datenmenge verworfen wurde, nicht magisch mehr Speicherplatz beansprucht, wenn die Qualität erhöht wird - blockartige Bilder werden auch bei hohen Qualitätseinstellungen sehr gut komprimiert. Meiner Meinung nach ist es also vollkommen in Ordnung, eingehende q = 1 auf q = 85 zu erhöhen.
Aus diesem Grund würde ich denken, dass es durchaus akzeptabel ist, einfach eine anständige Qualitätseinstellung zu erzwingen.
quelle
Hier ist eine Formel, die sich als gut erwiesen hat:
jpg100size (die Größe, die für 98-100% Qualität nicht in Byte überschritten werden sollte) = width * height / 1.7
jpgxsize = jpg100size * x (x = Prozent, z. B. 0,65)
Sie können diese also verwenden, um statistisch herauszufinden, in welcher Qualität Ihr JPG zuletzt gespeichert wurde. Wenn Sie die Qualität auf 65% reduzieren möchten und ein erneutes Abtasten vermeiden möchten, sollten Sie die Größe zunächst vergleichen, um sicherzustellen, dass sie nicht bereits zu niedrig ist, und erst dann die Qualität verringern
quelle
1.7
Koeffizienten berechnet ?Jedes neue Speichern der Datei verringert die Gesamtqualität weiter. Durch die Verwendung höherer Qualitätswerte erhalten Sie mehr Bild. Unabhängig von der ursprünglichen Bildqualität.
quelle
Wenn Sie ein JPEG mit derselben Software, mit der es ursprünglich erstellt wurde, mit denselben Einstellungen erneut speichern, werden Sie feststellen, dass der Schaden minimiert ist. Der Algorithmus wirft in der Regel dieselben Informationen aus, die er beim ersten Mal ausgegeben hat. Ich glaube nicht, dass es eine Möglichkeit gibt, herauszufinden, welche Ebene ausgewählt wurde, indem man sich nur die Datei ansieht. Selbst wenn Sie könnten, garantiert unterschiedliche Software fast unterschiedliche Parameter und Rundungen, was eine Übereinstimmung fast unmöglich macht.
quelle
Dies mag eine dumme Frage sein, aber warum sollten Sie sich Gedanken über das Mikromanagement der Qualität des Dokuments machen? Ich glaube, wenn Sie ImageMagick für die Konvertierung verwenden, wird die Qualität des JPEG für Sie optimal verwaltet. http://www.php.net/manual/en/intro.imagick.php
quelle