How to find the JPG quality?
When I save a JPG file with GIMP, I can adjust the quality I save it at, from 0-100 (I use 89). It seems like I've used an app to see what this number was on saved file but if I did I can't for the life of me figure out what it was. Any suggestions as to what to use?
Solution 1:
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?
Solution 2:
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).
Solution 3:
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.
Solution 4:
JPEGsnoop is a nice alternative to ImageMagick's identify
. The download is quite small and is available in portable format.
After processing a jpg, you will find the "Approx quality factor" under the DQT marker.