jpegli, MozJPEG or jpegoptim: what does each do for phone photos?
jpegli does the most: it made the image data of iPhone photos 18.9% smaller at the median, MozJPEG at an equal or higher SSIMULACRA 2 score only 12.1%, and lossless jpegoptim 2.1%. Measured on October 28, 2026 on a MacBook Pro on JPG photos from several iPhone generations; at an equal or higher score, jpegli was smaller than MozJPEG for every photo.
How much smaller does jpegli make a phone photo?
18.9% at the median, taking 5.30 MB of image data down to 4.15 MB. At distance 1.0 (cjpegli -d 1.0), the saving in the measurement on October 28, 2026 ranged from 16.7% to 39.7%, with a median SSIMULACRA 2 score of 86.0 against the original.
SSIMULACRA 2 compares an image with its original and returns a score up to 100; 100 means identical pixels, 90 visually lossless, 85 excellent, 80 very high quality (SSIMULACRA 2 on GitHub, checked October 28, 2026). jpegli is Google’s JPEG encoder from the JPEG XL project (jpegli on GitHub, checked October 28, 2026).
How does MozJPEG do at an equal or higher score?
Worse than jpegli: brought to at least the same SSIMULACRA 2 score, the MozJPEG files on October 28, 2026 were 4.71 MB at the median, 12.1% smaller than the original. jpegli was smaller for every photo, by 8.9% at the median, between 0.2% and 18.7%.
MozJPEG needed a quality between 90 and 93 per photo for that. MozJPEG is Mozilla’s JPEG encoder based on libjpeg-turbo (MozJPEG on GitHub, checked October 28, 2026).
What does jpegoptim bring?
Little when lossless: jpegoptim rearranged the data and saved 2.1% at the median, between 0.6% and 3.7%, with the pixels unchanged. With -m90, at most quality 90, it saved 6.3%, at a SSIMULACRA 2 score of 87.8.
jpegoptim optimizes JPEG files losslessly and, if asked, lossily up to a maximum quality (jpegoptim on GitHub, checked October 28, 2026).
All methods compared
jpegli is the smallest of the methods that reach or exceed jpegli’s score; jpegoptim with -m90 is less small at a higher score and not directly comparable.
| Method | Median size | Median saving | Saving range | Median SSIMULACRA 2 |
|---|---|---|---|---|
| Original, image data only | 5.30 MB | 0% | 0% | 100 |
jpegli, -d 1.0 |
4.15 MB | 18.9% | 16.7% to 39.7% | 86.0 |
| MozJPEG, at least jpegli’s score | 4.71 MB | 12.1% | 5.0% to 39.1% | 87.2 |
| jpegoptim, lossless | 5.21 MB | 2.1% | 0.6% to 3.7% | 100 |
jpegoptim, -m90 |
4.64 MB | 6.3% | 4.8% to 30.6% | 87.8 |
All methods were measured without metadata and without a gain map, image data only. MozJPEG sits slightly above jpegli’s score because its quality only moves in whole steps.
What does Levati do with a phone photo?
Levati re-encodes a photo from quality 90 up with jpegli -d 1.0 and keeps the metadata without location, the color profile and the gain map for HDR. With all of that, the photos got 17.8% smaller at the median on October 28, 2026, from 5.58 MB to 4.42 MB; metadata and gain map added 367 KB at the median over jpegli’s bare image data.
Automatic takes over new photos on the desktop on its own. How much a shorter long edge adds is covered in How do you make a photo smaller for email on a Mac?, and what happens to the location when shrinking in How do you remove the location from photos on a Mac?.
How was this measured?
The measurement covers 31 JPG photos from iPhone 11 Pro, iPhone 13, iPhone 15 and iPhone 17, on October 28, 2026 on a MacBook Pro with M5 Pro running macOS 27.2, each on a working copy.
- Image data: all metadata and everything after the end of the image removed from every result and the original, so EXIF, color profile and gain map, with
exiftool -all= -trailer:all=(ExifTool 13.55), without re-encoding the image data. - jpegli:
cjpegli -d 1.0as shipped in Levati, built from jpegli at commit031a0077. - MozJPEG 4.1.5: per photo, the lowest whole quality at which SSIMULACRA 2 reaches at least jpegli’s score, searched between 50 and 100.
- jpegoptim 1.5.6:
--strip-all, once lossless and once with-m90. - Levati: the function behind the Levati 1.0.1 command-line tool, with Trash and journal in a working folder; result with metadata and gain map.
- Quality: SSIMULACRA 2 from jpeg-xl 0.12.0, original and result both decoded with
djpeg. - Analysis: file size in bytes, median and range from minimum to maximum; 1 MB is 1,000,000 bytes.
Not measured: photos from other makers, HEIC and other jpegli distances; the photos themselves are not published.