How to find the JPG quality?

To add to Arjan's answer:

ImageMagick's identify appears to actually look inside the JPEG image to guess the quality setting used to encode it.

ImageMagick's source code (cheer for free software :-)) contains the lines:

/*
  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, line 843ff. in my recent version of ImageMagick's source code).

I don't know enough about JPEG to really understand, but it appears to do something like described in this article:

Determine the JPEG quality factor by using Visual C# .NET (link dead as of Januar 2018; copy on archive.org from 2015)

So yes, identify can actually determine the quality setting of a JPEG just from the compressed file alone (though the result may not always be completely accurate).


Once saved, you cannot tell the quality anymore.

(Setting the quality while saving just tells the software how much loss you find acceptable, but once saved: what's lost is lost. You'd need a human to say if something looks nice.)

Hmmm, I guess I was wrong. I still think the above is correct, but ImageMagick's identify proves me wrong?

identify -verbose myimage.jpg

Image: myimage.jpg
  Format: JPEG (Joint Photographic Experts Group JFIF format)
  Class: DirectClass
  Geometry: 358x240+0+0
  Resolution: 300x300
  [...]
  Compression: JPEG
  Quality: 90
  Orientation: Undefined
  [...]

I don't know how the image in my test was saved, but it does not have any EXIF data. Could the quality still be stored in the image?


As Arjan metioned identify -verbose myimage.jpg will do it. As imagemagick is a CLI tool, it may be useful for scripting. The approach identify -verbose myimage.jpg | grep ... is preety slow. I recommend using IM like this

identify -format '%Q' myimage.jpg

It is massively faster.