Jak znaleźć jakość JPG?

16

Kiedy zapisuję plik JPG w GIMP, mogę dostosować jakość, w której go zapisuję, od 0-100 (używam 89). Wygląda na to, że użyłem aplikacji, aby zobaczyć, jaki numer znajduje się w zapisanym pliku, ale jeśli tak, nie mogę przez całe życie ustalić, co to było. Wszelkie sugestie dotyczące tego, czego użyć?

Nataniel
źródło
2
Aby się upewnić, że jest znany: ustawienie jakości różnych aplikacji nie jest porównywalne, ogólnie: faqs.org/faqs/jpeg-faq/part1/section-5.html . Jednak zarówno GIMP, jak i ImageMagick powinny korzystać ze skali jakości IJG.
Michael Schumacher

Odpowiedzi:

22

Po zapisaniu nie można już powiedzieć o jakości.

(Ustawienie jakości podczas zapisywania mówi tylko oprogramowaniu, ile strat uważasz za akceptowalne, ale raz zapisane: utracone utracone. Potrzebujesz człowieka, by powiedzieć, czy coś wygląda ładnie.)

Hmmm, chyba się myliłem. Nadal uważam, że powyższe jest prawidłowe, ale ImageMagick „s identifyudowadnia mi źle?

identyfikacja -verbose myimage.jpg

Zdjęcie: myimage.jpg
  Format: JPEG (format JFIF Joint Photographic Experts Group)
  Klasa: DirectClass
  Geometria: 358 x 240 + 0 + 0
  Rozdzielczość: 300 x 300
  [...]
  Kompresja: JPEG
  Jakość: 90
  Orientacja: niezdefiniowana
  [...]

Nie wiem, jak obraz został zapisany w moim teście, ale nie ma żadnych danych EXIF. Czy jakość może być nadal przechowywana na obrazie?

Arjan
źródło
Czy nie możesz eksperymentować z konwersją na różne cechy? Trudno w to uwierzyć, chyba że ImageMagick przechowuje prywatne dane w pliku jpg (więc może to nie działać z innymi pakietami).
harrymc
Ciekawy. Poczekam, aby zobaczyć, jak to się rozwinie.
Nathaniel
1
+1 Tak działa imagemagick. Mogę wielokrotnie zmieniać jakość JPEG i użyć identyfikatora, aby zobaczyć zmianę. Działa to, jeśli korzystam z konwersji (kolejna niestabilność imagemagick) lub innego narzędzia, takiego jak MS Photo Editor.
DaveParillo
1
ImageMagick robi coś innego. Daje oszacowanie, zamiast czytać, co zrobiło oryginalne oprogramowanie. Twoja oryginalna, przekreślona odpowiedź jest naprawdę bardziej poprawna. Zobacz odpowiedź @ sleske.
mattdm
26

Aby dodać do odpowiedzi Arjana:

identifyWygląda na to, że ImageMagick faktycznie zagląda do obrazu JPEG, aby odgadnąć ustawienie jakości użyte do jego zakodowania.

Kod źródłowy ImageMagick (dopinguj darmowe oprogramowanie :-)) zawiera następujące wiersze :

/*
  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.c, wiersz 843ff. w mojej ostatniej wersji kodu źródłowego ImageMagick).

Nie wiem wystarczająco dużo o JPEG, żeby naprawdę zrozumieć, ale wydaje się, że robi coś takiego, jak opisano w tym artykule:

Określ współczynnik jakości JPEG za pomocą Visual C # .NET (link martwy od stycznia 2018; skopiuj na archive.org z 2015 )

Tak, tak, identifymoże faktycznie określić ustawienie jakości JPEG tylko na podstawie samego skompresowanego pliku (chociaż wynik nie zawsze może być całkowicie dokładny).

Śleske
źródło
1
Whoa. Bardzo miło z twojej strony, że możesz sprawdzić kod źródłowy. Chłodny.
Nathaniel
@Nathaniel, czy możesz wybrać tę odpowiedź jako zaakceptowaną zamiast mojej? Dzięki! (Nie mogę usunąć mojego, dopóki jest zaakceptowany.)
Arjan
Wyszukuje tabelę kwantyzacji JPEG, która najlepiej uwzględnia wygląd skompresowanego strumienia bitów.
jbarlow
5

Tak jak powiedział Arjan identify -verbose myimage.jpg, zrobi to. Ponieważ imagemagick jest narzędziem CLI, może być przydatne do tworzenia skryptów. Podejście identify -verbose myimage.jpg | grep ...jest dość powolne. Polecam korzystanie z komunikatorów internetowych w ten sposób

identify -format '%Q' myimage.jpg

Jest znacznie szybszy.

ManuelSchneid3r
źródło
2

JPEGsnoop to miła alternatywa dla ImageMagick's identify. Pobieranie jest dość małe i jest dostępne w formacie przenośnym.

Po przetworzeniu pliku JPG pod znacznikiem DQT znajdziesz „Przybliżony współczynnik jakości”.

idmadj
źródło
1

Z biblioteką ImageMagick ++ jest to łatwe:

Image magick_image( pathname );
size_t compressionFactor = magick_image.quality(); // 0..100
Valeriy Van
źródło
1

Picasa 3 ma panel właściwości, który pokazuje jakość JPEG, ale w tej chwili jest to porzucone oprogramowanie. Picasa 3 Dick Masterson

Uğur Gümüşhan
źródło