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?
-
3Just to make sure that it is known: the quality setting of different applications is not comparable, in general: http://www.faqs.org/faqs/jpeg-faq/part1/section-5.html. Both GIMP and ImageMagick should use the IJG quality scale, though. – Michael Schumacher Sep 29 '15 at 12:36
6 Answers
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).
- 22,652
- 10
- 69
- 93
-
2
-
@Nathaniel, can you please select this answer as being the accepted one, instead of mine? Thanks! (I cannot delete mine as long as it's accepted.) – Arjan Mar 24 '17 at 14:22
-
It is searching for the JPEG quantization table that best accounts for how the compressed bitstream looks. – jbarlow Apr 19 '18 at 04:05
-
Constants (jpeglib.h): `NUM_QUANT_TBLS` = `4`. `DCTSIZE2` = `64`. `quantval[i]` just gets the number at given position. – user136036 Feb 25 '20 at 23:58
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?
- 30,974
- 14
- 75
- 112
-
1Can't you experiment converting to different qualities? I find it hard to believe, unless ImageMagick stores some private data in the jpg (so this might not work with other packages). – harrymc Oct 29 '09 at 20:37
-
-
1+1 Yes imagemagick works. I can repeatedly change the jpeg quality and use identify to see the change. This works if I use convert (another imagemagick untility) or another tool like MS Photo Editor. – DaveParillo Oct 29 '09 at 22:20
-
4ImageMagick is doing something different. It gives an estimate, rather than reading what your original software did. Your original, now-crossed-out, answer is really more correct. See @sleske's answer. – mattdm Mar 24 '17 at 13:14
-
1**ImageMagick returns a quality assessment number, but that doesn't mean it's correct.** See http://www.faqs.org/faqs/jpeg-faq/part1/section-5.html from the jpeg creators themselves, and https://photo.stackexchange.com/questions/88167/is-it-possible-to-find-out-what-compression-ratio-was-used-for-a-particular-jpeg – matt wilkie Feb 18 '21 at 23:11
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.
- 1,183
- 1
- 10
- 28
Picasa 3 has the properties pane which shows the jpeg quality but it is an abandonware at the moment.

- 1,356
- 2
- 15
- 32
With ImageMagick++ library it's easy:
Image magick_image( pathname );
size_t compressionFactor = magick_image.quality(); // 0..100
- 111
- 3