Wie finde ich die JPG-Qualität?

16

Wenn ich eine JPG-Datei mit GIMP speichere, kann ich die Qualität, in der ich sie speichere, von 0-100 anpassen (ich verwende 89). Es scheint, als hätte ich eine App verwendet, um zu sehen, welche Nummer in der gespeicherten Datei enthalten ist, aber wenn ich das täte, kann ich für mein ganzes Leben nicht herausfinden, was es war. Irgendwelche Vorschläge, was zu verwenden ist?

Nathaniel
quelle
2
Nur um sicherzustellen, dass es bekannt ist: Die Qualitätseinstellung der verschiedenen Anwendungen ist im Allgemeinen nicht vergleichbar: faqs.org/faqs/jpeg-faq/part1/section-5.html . Sowohl GIMP als auch ImageMagick sollten jedoch die IJG-Qualitätsskala verwenden.
Michael Schumacher

Antworten:

22

Einmal gespeichert, können Sie die Qualität nicht mehr feststellen.

(Wenn Sie die Qualität beim Speichern einstellen, wird der Software lediglich mitgeteilt, wie viel Verlust Sie als akzeptabel erachten, aber sobald er gespeichert hat: Was verloren geht, geht verloren. Sie müssen einen Menschen damit beauftragen, zu sagen, ob etwas gut aussieht.)

Hmmm, ich glaube ich habe mich geirrt. Ich denke immer noch die oben richtig ist, aber ImageMagick ‚s identifybeweist mir falsch?

identifiziere -verbose myimage.jpg

Bild: myimage.jpg
  Format: JPEG (JFIF-Format der Joint Photographic Experts Group)
  Klasse: DirectClass
  Geometrie: 358 x 240 + 0 + 0
  Auflösung: 300x300
  [...]
  Komprimierung: JPEG
  Qualität: 90
  Orientierung: Undefiniert
  [...]

Ich weiß nicht, wie das Bild in meinem Test gespeichert wurde, aber es enthält keine EXIF-Daten. Konnte die Qualität noch im Bild gespeichert werden?

Arjan
quelle
Können Sie nicht experimentieren, in verschiedene Qualitäten umzuwandeln? Ich kann es kaum glauben, es sei denn, ImageMagick speichert einige private Daten im JPG (dies funktioniert möglicherweise nicht mit anderen Paketen).
Harrymc
Interessant. Ich werde abwarten, wie es ausgeht.
Nathaniel
1
+1 Ja, imagemagick funktioniert. Ich kann die JPEG-Qualität wiederholt ändern und identifiziere, um die Änderung zu sehen. Dies funktioniert, wenn ich convert (ein anderes imagemagick untility) oder ein anderes Tool wie MS Photo Editor verwende.
DaveParillo
1
ImageMagick macht etwas anderes. Es gibt eine Schätzung, anstatt zu lesen, was Ihre ursprüngliche Software getan hat. Ihre ursprüngliche, durchgestrichene Antwort ist wirklich korrekter. Siehe @ sleskes Antwort.
Mattdm
26

Um zu Arjans Antwort hinzuzufügen:

ImageMagicks identifyscheint tatsächlich in das JPEG-Bild zu schauen, um die Qualitätseinstellung zu erraten, die zum Codieren verwendet wurde.

Der Quellcode von ImageMagick (Cheer for Free Software :-)) enthält die Zeilen :

/*
  Determine the JPEG compression quality from the quantization tables.
*/
sum=0;
for (i=0; i < NUM_QUANT_TBLS; i++)
{
  if (jpeg_info.quant_tbl_ptrs[i] != NULL)
    for (j=0; j < DCTSIZE2; j++)
      sum+=jpeg_info.quant_tbl_ptrs[i]->quantval[j];

( coders/jpeg.cZeile 843ff. in meiner letzten Version von ImageMagicks Quellcode).

Ich weiß nicht genug über JPEG, um es wirklich zu verstehen, aber es scheint etwas zu tun, wie in diesem Artikel beschrieben:

Ermitteln Sie den JPEG-Qualitätsfaktor mithilfe von Visual C # .NET (Link seit Januar 2018 nicht mehr verfügbar; Kopie auf archive.org von 2015 ).

Also ja, identifykann die Qualitätseinstellung eines JPEGs tatsächlich nur aus der komprimierten Datei bestimmen (obwohl das Ergebnis möglicherweise nicht immer ganz genau ist).

sleske
quelle
1
Whoa. Sehr nett von Ihnen, den Quellcode zu überprüfen. Cool.
Nathaniel
@ Nathaniel, kannst du bitte diese Antwort als die akzeptierte anstelle meiner Antwort auswählen? Vielen Dank! (Ich kann meins nicht löschen, solange es akzeptiert wird.)
Arjan
Es wird nach der JPEG-Quantisierungstabelle gesucht, die das Aussehen des komprimierten Bitstroms am besten berücksichtigt.
Jbarlow
5

Wie Arjan identify -verbose myimage.jpges wollte. Da imagemagick ein CLI-Tool ist, kann es für die Skripterstellung hilfreich sein. Der Ansatz identify -verbose myimage.jpg | grep ...ist sehr langsam. Ich empfehle, IM wie folgt zu verwenden

identify -format '%Q' myimage.jpg

Es ist massiv schneller.

ManuelSchneid3r
quelle
2

JPEGsnoop ist eine nette Alternative zu ImageMagick identify. Der Download ist recht klein und liegt im portablen Format vor.

Nach der Bearbeitung eines JPG finden Sie unter dem DQT-Marker den "Approx quality factor".

idmadj
quelle
1

Mit der ImageMagick ++ - Bibliothek ist es einfach:

Image magick_image( pathname );
size_t compressionFactor = magick_image.quality(); // 0..100
Valeriy Van
quelle
1

Picasa 3 verfügt über den Eigenschaftenbereich, in dem die JPEG-Qualität angezeigt wird, es handelt sich jedoch derzeit um eine Abbruchware. Picasa 3 Dick Masterson

Uğur Gümüşhan
quelle