Frage

Dies ist wirklich eine zwei Teil Frage, da ich noch nicht vollständig verstehe, wie diese Dinge funktionieren:

Meine Situation: Ich schreibe eine Web -App, mit der der Benutzer ein Bild hochladen kann. Meine App verändert dann etwas, das angezeigt werden sollte (z. B. 640x480-ish) und speichert die Datei für die spätere Verwendung.

Meine Fragen:

  1. Ist es bei einer willkürlichen JPEG -Datei möglich, zu erkennen, was die Qualitätsniveau ist, damit ich die gleiche Qualität verwenden kann, wenn ich das Bild der geeigneten Größe speichere?
  2. Ist das überhaupt wichtig? Sollte ich alle Bilder auf einer anständigen Ebene (z. B. 75-80) speichern, unabhängig von der ursprünglichen Qualität?

Ich bin mir darüber nicht so sicher, dass, wie ich es mir vorhabe: (lass uns ein extremes Beispiel nehmen), wenn jemand ein 5 -Megapixel -Bild in der Qualität 0 gespeichert hatte, wäre es blockig als alles andere. Reduzierung der Bildgröße auf 640 x 480 würde die Blockigkeit geglättet und kaum Weniger spürbar ... bis ich es wieder mit Qualität 0 gespart habe ...

Wenn es am anderen Ende des Spektrums ein Bild mit q = 0 gab, wird die Größe von 640 x 480 nicht die Tatsache ändern, dass es wie ein völliger Mist aussieht, sodass das Sparen mit q = 80 überflüssig wäre.

Bin ich überhaupt nah?

Ich verwende die GD2 -Bibliothek für PHP, wenn dies von Nutzen ist

War es hilfreich?

Lösung

  1. JPEG ist ein verlustvolles Format. Jedes Mal, wenn Sie ein JPEG -gleiches Bild speichern, unabhängig von der Qualitätsstufe, werden Sie die tatsächliche Bildqualität verringern. Selbst wenn Sie ein Qualitätsniveau aus der Datei erhalten haben, konnten Sie nicht die gleiche Qualität beibehalten, wenn Sie ein JPEG wieder sparen (sogar bei Qualität = 100).

  2. Sie sollten Ihr JPEG so hoch wie hoch wie möglich wie möglich in Bezug auf die Dateigröße. Oder verwenden Sie ein verlustfreies Format wie PNG.

JPEG -Dateien mit geringer Qualität werden nicht einfach blockierter. Stattdessen wird die Farbtiefe reduziert und das Detail der Bildabschnitte entfernt. Sie können sich nicht darauf verlassen, dass Bilder von geringerer Qualität blockig sind und auf kleinere Größen in Ordnung sind.

Laut dem JFIF Spec. Die Qualitätsnummer (0-100) wird im Bildheader nicht gespeichert, obwohl die horizontale und vertikale Pixeldichte gespeichert ist.

Andere Tipps

Sie können die Kompressebene durch Imagemagick anzeigen. Download- und Installationsanweisungen finden Sie in der offizielle Website.

Führen Sie nach der Installation den folgenden Befehl aus der Befehlszeile aus:

identify -format '%Q' yourimage.jpg

Und Sie sollten den Wert von 0 (geringer Qualität, kleiner Filegröße) bis 100 (hoher Qualität, großer Filegröße) erhalten.

Informationsquelle

Für zukünftige Besucher, die die Qualität eines bestimmten JPEG überprüfen, können Sie nur ImageMagick -Tools verwenden:

$> identify -format '%Q' filename.jpg
   92%

Der JPEG -Komprimierungsalgorithmus hat einige Parameter, die die Qualität des Ergebnisbildes beeinflussen.

Einer dieser Parameter sind Quantisierungstabellen, die definiert, wie viele Bits für jeden Koeffizienten verwendet werden. Verschiedene Programme verwenden unterschiedliche Quatisierungstabellen.

Einige Programme ermöglichen es dem Benutzer, die Qualität der Wertstufe 0-100 festzulegen. Es gibt jedoch keine gemeinsame Abweichung dieser Zahl. Das Bild mit Photoshop mit 60% Qualität dauert 46 KB, während das mit GIMP erstellte Bild nur 26 KB dauert.

Quantisierungstabellen sind ebenfalls unterschiedlich.

Es gibt andere Parameter wie Teilabtastung, DCT -Methode und etc.

Sie können sie also nicht alle nach einer einzelnen Qualitätsnummer beschreiben und können die Qualität von JPEG -Bildern nicht mit einer einzelnen Zahl vergleichen. Sie können jedoch eine solche Zahl wie Photoshop oder GIMP erstellen, die Kompromiss zwischen der Größe der Qualität beschreiben.

Mehr Informationen:http://patrakov.blogspot.com/2008/12/jpeg-quality-is-Meaningless-number.html

Übungen sind, dass Sie das Bild so ändern, dass Sie danach die angemessene Größe und JPEG anwenden. In diesem Fall haben riesige und mittlere Bilder die gleiche Größe und Qualität.

Da es bereits zwei Antworten verwendet identify, hier ist einer das Gibt auch den Dateinamen aus (zum Scannen mehrerer Dateien gleichzeitig):

Wenn Sie eine einfache Ausgabe von haben möchten filename: quality Für die Verwendung auf mehreren Bildern können Sie verwenden

identify -format '%f: %Q' *

zu Zeigen Sie den Dateinamen + Komprimierung aller Dateien innerhalb des aktuellen Verzeichnisses.

Es gibt also im Grunde zwei Fälle, die Ihnen wichtig sind:

  1. Wenn ein eingehendes Bild zu hoch ist, kann es eine unangemessene Menge an Platz in Anspruch nehmen. Daher möchten Sie beispielsweise beispielsweise eingehende Q = 99 auf Q = 85 reduzieren.

  2. Wenn ein eingehendes Bild zu niedrig ist, ist es möglicherweise Platzverschwendung, seine Qualität zu erhöhen. Abgesehen davon, dass ein Bild, in dem eine große Menge an verworfenen Daten verworfen wurde, nicht auf magische Weise Platz in Anspruch nimmt, wenn die Qualität angehoben wird - blocky Bilder werden selbst bei hochwertigen Einstellungen sehr gut komprimiert. Meiner Meinung nach ist es also vollkommen in Ordnung, eingehende Q = 1 auf Q = 85 zu erhöhen.

Daraus denke ich, dass es eine vollkommen akzeptable Sache ist, einfach eine anständige Qualität zu erzwingen.

Hier ist eine Formel, die ich gut funktioniert:

  1. JPG100-Größen (die Größe sollte in Bytes für 98-100% Qualität nicht überschreiten) = Breite*Höhe/1,7

  2. JPGXSIZE = JPG100SIZE*X (x = Prozent, z. B. 0,65)

Sie könnten diese verwenden, um statistisch herauszufinden, in welcher Qualität Ihr JPG zuletzt gespart wurde. Wenn Sie es auf die Qualität von 65% zu einer Qualität bringen möchten, sollten Sie die Größe zunächst vergleichen, um sicherzustellen, dass sie nicht bereits zu niedrig ist, und nur die Qualität reduzieren

Jede neue Speicherung der Datei wird die Gesamtqualität weiter verringern, indem Sie höhere Qualitätswerte verwenden, die Sie mehr im Bild erhalten. Unabhängig davon, welche Originalbildqualität war.

Wenn Sie einen JPEG mit derselben Software erneut mit denselben Einstellungen erstellt haben, stellen Sie fest, dass der Schaden minimiert wird - der Algorithmus wird dazu neigen, dieselben Informationen zu werfen, die er beim ersten Mal ausgegeben hat. Ich glaube nicht, dass es eine Möglichkeit gibt, zu wissen, was Level nur durch Betrachtung der Datei ausgewählt wurde. Selbst wenn Sie könnten, garantiert verschiedene Software fast unterschiedliche Parameter und runden, was ein Match fast unmöglich macht.

Dies mag eine dumme Frage sein, aber warum sollten Sie sich Sorgen machen, die Qualität des Dokuments zu mikromanieren? Ich glaube, wenn Sie Imagemagick verwenden, um die Konvertierung durchzuführen, wird dies die Qualität des JPEG für Sie für den besten Effekt verwalten. http://www.php.net/manual/en/intro.imagick.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top