Google’s new algorithm promises to reduce the size of JPEG images by 35% without losing quality
Guetzli uses the JPEG format. So, softwares which can currently read standard JPEGs will also be able to read Guetzli JPEGs without any other modification. Guetzli Is A New JPEG Encoder For Higher Compression Developed By Google. Released free software generates ~35% smaller images than libjpeg. We are not going in to in depth technical details about the technology as readers can read the official Google blog with visual examples :
1 | https://research.googleblog.com/2017/03/announcing-guetzli-new-open-source-jpeg.html |
Guetzli is an algorithm very similar to Zopfli, which is another project also developed by Mountain View but for the compression of PNG and gzip file format.
Guetzli uses a large amount of memory, around 300MB of memory per 1 megapixel of the input image and a significant amount of CPU time – about 1 minute of CPU per 1 megapixel of input image.
---
Guetzli : A New JPEG Encoder For Higher Compression
As developer, you will be interested to check the Github project and try :
1 | https://github.com/google/guetzli |
On Mac, unless you want the build by hand, with Homebrew you can easily install by running the command :
1 | brew install guetzli |
which will return this output :
1 2 3 4 5 6 7 8 9 10 11 | ==> Installing dependencies for guetzli: libpng ==> Installing guetzli dependency: libpng ==> Downloading https://homebrew.bintray.com/bottles/libpng-1.6.29.sierra.bottle ######################################################################## 100.0% ==> Pouring libpng-1.6.29.sierra.bottle.tar.gz ? /usr/local/Cellar/libpng/1.6.29: 26 files, 1.2MB ==> Installing guetzli ==> Downloading https://homebrew.bintray.com/bottles/guetzli-1.0.1.sierra.bottle ######################################################################## 100.0% ==> Pouring guetzli-1.0.1.sierra.bottle.tar.gz ? /usr/local/Cellar/guetzli/1.0.1: 5 files, 229.2KB |
Example command to convert image is :
1 | guetzli [--quality Q] [--verbose] original.png output.jpg |
There is no manual entry for guetzli. As example, I ran :
1 | guetzli --quality 85 --verbose 14.jpg 14guetzli.jpg |
which returned this output :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | riginal Out[ 158254] BA[100.00%] D[0.0000] Score[158254.0000] (*) Iter 1: f111111 quantization matrix: 1 1 1 1 1 1 1 1 1 1 1 2 2 3 3 3 1 1 1 2 2 3 3 3 1 1 1 1 1 1 1 1 1 1 1 2 3 3 3 3 1 1 1 2 3 3 3 3 1 1 1 1 1 1 1 2 1 1 1 3 3 3 3 3 1 1 1 3 3 3 3 3 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 2 2 3 3 3 3 3 3 1 1 1 1 1 2 2 3 2 3 3 3 3 3 3 3 2 3 3 3 3 3 3 3 1 1 1 1 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Iter 1: f111111 GQ[ 7.08] Out[ 158254] BA[100.00%] D[0.0000] Score[158254.0000] Iter 2: f111111 quantization matrix: 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Iter 2: f111111 GQ[22.56] Out[ 137554] BA[100.00%] D[0.3788] Score[137554.0000] (*) Iter 3: f111111 quantization matrix: 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 Iter 3: f111111 GQ[45.11] Out[ 125457] BA[100.00%] D[0.7007] Score[125457.0000] (*) Iter 4: f111111 quantization matrix: 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 Iter 4: f111111 GQ[67.67] Out[ 115489] BA[100.00%] D[0.9011] Score[115489.0000] (*) Iter 5: f111111 quantization matrix: 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 11 9 9 9 9 9 9 9 11 9 9 9 9 9 9 9 11 Iter 5: f111111 GQ[90.31] Out[ 109336] BA[100.00%] D[1.1391] Score[109336.0000] (*) Iter 6: f111111 quantization matrix: 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 13 11 11 11 11 11 11 11 13 11 11 11 11 11 11 11 13 Iter 6: f111111 GQ[112.87] Out[ 105255] BA[100.00%] D[1.3803] Score[105255.0000] (*) Iter 7: f111111 quantization matrix: 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 15 15 13 13 13 13 13 13 15 15 13 13 13 13 13 13 15 15 Iter 7: f111111 GQ[135.52] Out[ 99795] BA[100.00%] D[1.6504] Score[99795.0000] (*) Iter 8: f111111 quantization matrix: 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 17 15 15 15 15 15 15 15 17 15 15 15 15 15 15 15 17 15 15 15 15 15 15 17 17 15 15 15 15 15 15 17 17 15 15 15 15 15 15 17 17 Iter 8: f111111 GQ[158.17] Out[ 96721] BA[100.00%] D[2.1032] Score[4472752592435967084701623882088448.0000] Iter 9: f111111 quantization matrix: 13 13 13 13 15 15 15 15 13 13 13 13 15 15 15 15 13 13 13 13 15 15 15 15 13 13 13 15 15 15 15 15 13 13 13 15 15 15 15 15 13 13 13 15 15 15 15 15 13 15 15 15 15 15 15 15 13 15 15 15 15 15 15 15 13 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 Iter 9: f111111 GQ[146.92] Out[ 97700] BA[100.00%] D[1.8280] Score[97700.0000] (*) YUV444 selected quantization matrix: 13 13 13 13 15 15 15 15 13 13 13 13 15 15 15 15 13 13 13 13 15 15 15 15 13 13 13 15 15 15 15 15 13 13 13 15 15 15 15 15 13 13 13 15 15 15 15 15 13 15 15 15 15 15 15 15 13 15 15 15 15 15 15 15 13 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 Iter 10: f111111(7) up Coeffs[7511/9355] Blocks[1188/1517/34100] ValThres[1.7390] Out[ 92821] EstErr[0.17%] BA[100.00%] D[1.8828] Score[92821.0000] (*) Iter 11: f111111(7) up Coeffs[1844/1844] Blocks[988/988/34100] ValThres[0.1611] Out[ 91712] EstErr[0.19%] BA[100.00%] D[1.8829] Score[91712.0000] (*) |
Processed image nicely opened in Mac Preview.
Tagged With paperuri:(0ee59c2b833ed8da2904d2ce30274c88) , guetzli , jpeg encoder