When I first heard of oxipng some years ago I thought it was a faster optipng. I ran a few tests recently and saw that oxipng is indeed very fast but it also compresses much better than optipng in most cases.
This made me curious: How close was oxipng then to the smallest sizes you can get for PNG files? So I compressed all test images with FileOptimizer for Windows. FileOptimizer runs images through six different tools (including oxipng) in sequence, in order to achieve the smallest possible size. It takes its time, but it does give you the smallest possible size for each PNG image.
I was surprised to see that oxipng was close to the results FileOptimizer achieved.
I then had to know something else: I knew that WebP, a more modern format, is better, but how much better? So I converted all the test PNG images losslessly to WebP using cwebp.
The results are presented in the tables below.
For the hardware, operating systems, and versions used, see section at the bottom.
The commands and results for the CLI tools were tracked with hyperfine: op111-20250911-oxipng-hyperfine-data.txt.
The FileOptimizer results were tracked with screenshots: op111-20250911-oxipng-fileoptimizer-data.zip.
You have questions, corrections, or just want to say hi? Please use the contact form.
d3js.org.png
Screenshot of the D3.js homepage I took in Firefox, Debian 13 (GNOME 48, Wayland), using the FireShot extension.
- Filename: d3js.org.png
- Original size: 1,493,211 bytes
- Dimensions: 1600 × 1205 pixels
- Number of colors: 168,716
- Original image: d3js.org.png
COMPRESSION RESULTS FOR d3js.org.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 2.638s | 1,113,706 | 25.42% |
optipng -o7 | 32.903s | 1,112,055 | 25.53% |
oxipng default | 0.764s | 1,058,046 | 29.14% |
oxipng --opt max | 1.937s | 1,046,446 | 29.92% |
oxipng --opt max --zopfli --fast | 20.504s | 1,041,552 | 30.25% |
oxipng --opt max --zopfli | 28.986s | 1,041,552 | 30.25% |
FileOptimizer level 2 (fast) | 97.000s | 1,046,856 | 29.89% |
FileOptimizer level 5 (normal) | 116.000s | 1,041,336 | 30.26% |
FileOptimizer level 7 (good) | 161.000s | 1,041,336 | 30.26% |
FileOptimizer level 9 (best) | 380.000s | 1,040,840 | 30.30% |
cwebp (lossless) default | 0.533s | 828,992 | 44.48% |
cwebp (lossless) -z9 | 7.373s | 813,606 | 45.51% |
NOTES
- oxipng
--opt max --zopfli
gives the same size with and without--fast
. - oxipng best and FileOptimizer best are 0.01 percentage points apart.
debian-desktop.png
Screenshot of my Debian desktop I took with the GNOME screenshot tool (Debian 13, GNOME 48, Wayland).
- Filename: debian-desktop.png
- Original size: 707,471 bytes
- Dimensions: 2560 × 1440 pixels
- Number of colors: 20,322
- Original image: debian-desktop.png
COMPRESSION RESULTS FOR debian-desktop.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 3.096s | 464,555 | 34.34% |
optipng -o7 | 52.281s | 464,555 | 34.34% |
oxipng default | 1.488s | 448,544 | 36.60% |
oxipng --opt max | 7.005s | 392,710 | 44.49% |
oxipng --opt max --zopfli --fast | 64.088s | 431,815 | 38.96% |
oxipng --opt max --zopfli | 156.336s | 382,459 | 45.94% |
FileOptimizer level 2 (fast) | 180.225s | 389,590 | 44.93% |
FileOptimizer level 5 (normal) | 310.000s | 383,528 | 45.79% |
FileOptimizer level 7 (good) | 396.000s | 381,896 | 46.02% |
FileOptimizer level 9 (best) | 1343.000s | 381,245 | 46.11% |
cwebp (lossless) default | 0.860s | 328,602 | 53.55% |
cwebp (lossless) -z9 | 4.480s | 264,570 | 62.60% |
NOTES
- optipng default and
-o7
give the same size. - oxipng
--opt max --zopfli
without--fast
reduces the size a lot more. - oxipng best and FileOptimizer best are 0.17 percentage points apart.
- A case where oxipng
--opt max --zopfli
reduces more without--fast
.
drought-map.png
- Filename: drought-map.png
- Original size: 976,919 bytes
- Dimensions: 2012 × 2293 pixels
- Number of colors: 4,772
- Source: https://www.eea.europa.eu/en/analysis/maps-and-charts/map-of-the-combined-drought
- Original filename: FIG2.1-261898-Map-extent-v7b.png
COMPRESSION RESULTS FOR drought-map.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 2.555s | 646,102 | 33.84% |
optipng -o7 | 24.141s | 646,102 | 33.84% |
oxipng default | 1.623s | 601,965 | 38.38% |
oxipng --opt max | 5.247s | 589,602 | 39.63% |
oxipng --opt max --zopfli --fast | 85.481s | 580,993 | 40.52% |
oxipng --opt max --zopfli | 109.564s | 580,993 | 40.52% |
FileOptimizer level 2 (fast) | 308.000s | 585,529 | 40.05% |
FileOptimizer level 5 (normal) | 417.000s | 580,985 | 40.52% |
FileOptimizer level 7 (good) | 473.000s | 580,681 | 40.55% |
FileOptimizer level 9 (best) | 1315.000s | 580,439 | 40.58% |
cwebp (lossless) default | 0.302s | 374,356 | 61.68% |
cwebp (lossless) -z9 | 6.437s | 369,064 | 62.22% |
NOTES
- optipng default and
-o7
give the same size. - oxipng
--opt max --zopfli
gives the same size with and without--fast
. - oxipng best and FileOptimizer best are 0.06 percentage points apart.
github.com-repo.png
Screenshot of the oxipng repo on GitHub I took in Chrome on Debian using the FireShot extension.
- Filename: github.com-repo.png
- Original size: 270,336 bytes
- Dimensions: 1352 × 1105 pixels
- Number of colors: 5,720
- Original image: github.com-repo.png
COMPRESSION RESULTS FOR github.com-repo.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.758s | 178,507 | 33.97% |
optipng -o7 | 7.945s | 178,445 | 33.99% |
oxipng default | 0.310s | 169,022 | 37.48% |
oxipng --opt max | 0.913s | 167,590 | 38.01% |
oxipng --opt max --zopfli --fast | 21.438s | 162,970 | 39.72% |
oxipng --opt max --zopfli | 25.154s | 162,970 | 39.72% |
FileOptimizer level 2 (fast) | 88.000s | 163,494 | 39.53% |
FileOptimizer level 5 (normal) | 107.000s | 162,968 | 39.72% |
FileOptimizer level 7 (good) | 127.000s | 162,825 | 39.77% |
FileOptimizer level 9 (best) | 373.000s | 162,438 | 39.91% |
cwebp (lossless) default | 0.068s | 76,358 | 71.75% |
cwebp (lossless) -z9 | 1.958s | 70,084 | 74.08% |
NOTES
- oxipng
--opt max --zopfli
gives the same size with and without--fast
.
goaccess.io-demo.png
Screenshot of the GoAccess demo page I took in Firefox on Debian using the FireShot extension.
- Filename: goaccess.io-demo.png
- Original size: 325,494 bytes
- Dimensions: 1600 × 1205 pixels
- Number of colors: 3,032
- Original image: goaccess.io-demo.png
COMPRESSION RESULTS FOR goaccess.io-demo.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.984s | 218,045 | 33.01% |
optipng -o7 | 10.085s | 218,045 | 33.01% |
oxipng default | 0.605s | 201,055 | 38.23% |
oxipng --opt max | 1.421s | 193,235 | 40.63% |
oxipng --opt max --zopfli --fast | 32.375s | 189,059 | 41.92% |
oxipng --opt max --zopfli | 41.427s | 189,059 | 41.92% |
FileOptimizer level 2 (fast) | 104.000s | 191,914 | 41.03% |
FileOptimizer level 5 (normal) | 134.000s | 189,036 | 41.93% |
FileOptimizer level 7 (good) | 152.000s | 189,036 | 41.93% |
FileOptimizer level 9 (best) | 535.000s | 188,220 | 42.17% |
cwebp (lossless) default | 0.090s | 89,142 | 72.61% |
cwebp (lossless) -z9 | 3.227s | 88,022 | 72.96% |
NOTES
- optipng default and
-o7
give the same size. - oxipng
--opt max --zopfli
gives the same size with and without--fast
. - oxipng best and FileOptimizer best are 0.25 percentage points apart.
html5-logo.png
- Filename: html5-logo.png
- Original size: 8,562 bytes
- Dimensions: 512 × 512 pixels
- Number of colors: 84
- Source: https://www.w3.org/html/logo/
- Original filename: HTML5_Logo_512.png
COMPRESSION RESULTS FOR html5-logo.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.064s | 4,780 | 44.17% |
optipng -o7 | 0.620s | 4,780 | 44.17% |
oxipng default | 0.052s | 5,147 | 39.89% |
oxipng --opt max | 0.191s | 4,429 | 48.27% |
oxipng --opt max --zopfli --fast | 2.046s | 4,273 | 50.09% |
oxipng --opt max --zopfli | 3.528s | 4,131 | 51.75% |
FileOptimizer level 2 (fast) | 54.000s | 4,091 | 52.22% |
FileOptimizer level 5 (normal) | 54.000s | 4,091 | 52.22% |
FileOptimizer level 7 (good) | 59.000s | 4,085 | 52.29% |
FileOptimizer level 9 (best) | 131.000s | 4,076 | 52.39% |
cwebp (lossless) default | 0.015s | 3,416 | 60.10% |
cwebp (lossless) -z9 | 0.834s | 3,460 | 59.59% |
NOTES
- optipng default beats oxipng default.
- cwebp default beats
-z9
. - A case where oxipng
--opt max --zopfli
reduces more without--fast
.
mediawiki-logo.png
- Filename: mediawiki-logo.png
- Original size: 28,656 bytes
- Dimensions: 270 × 300 pixels
- Number of colors: 4,635
- Source: https://commons.wikimedia.org/wiki/File:MediaWiki-2020-logo.svg
- Original filename: 270px-MediaWiki-2020-logo.svg.png
COMPRESSION RESULTS FOR mediawiki-logo.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.148s | 25,941 | 9.47% |
optipng -o7 | 2.028s | 25,941 | 9.47% |
oxipng default | 0.046s | 24,632 | 14.04% |
oxipng --opt max | 0.171s | 24,664 | 13.93% |
oxipng --opt max --zopfli --fast | 1.363s | 24,211 | 15.51% |
oxipng --opt max --zopfli | 2.816s | 24,211 | 15.51% |
FileOptimizer level 2 (fast) | 31.000s | 24,270 | 15.31% |
FileOptimizer level 5 (normal) | 19.000s | 24,012 | 16.21% |
FileOptimizer level 7 (good) | 21.000s | 23,966 | 16.37% |
FileOptimizer level 9 (best) | 62.000s | 23,888 | 16.64% |
cwebp (lossless) default | 0.058s | 19,830 | 30.80% |
cwebp (lossless) -z9 | 0.611s | 17,918 | 37.47% |
NOTES
- optipng default and
-o7
give the same size. - oxipng default beats
--opt max
. This is not an error. - oxipng
--opt max --zopfli
gives the same size with and without--fast
.
powertoys.png
Screenshot of the Windows PowerToys settings window I took on Windows 11 and saved with Paint.NET v5.1.9.
- Filename: powertoys.png
- Original size: 244,630 bytes
- Dimensions: 1230 × 917 pixels
- Number of colors: 18,791
- Original image: powertoys.png
COMPRESSION RESULTS FOR powertoys.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.960s | 230,325 | 5.85% |
optipng -o7 | 11.871s | 229,920 | 6.01% |
oxipng default | 0.266s | 201,533 | 17.62% |
oxipng --opt max | 0.725s | 198,008 | 19.06% |
oxipng --opt max --zopfli --fast | 8.663s | 194,709 | 20.41% |
oxipng --opt max --zopfli | 13.882s | 194,709 | 20.41% |
FileOptimizer level 2 (fast) | 60.000s | 196,585 | 19.63% |
FileOptimizer level 5 (normal) | 66.000s | 194,423 | 20.56% |
FileOptimizer level 7 (good) | 76.000s | 194,178 | 20.62% |
FileOptimizer level 9 (best) | 185.000s | 193,748 | 20.80% |
cwebp (lossless) default | 0.178s | 144,246 | 41.04% |
cwebp (lossless) -z9 | 1.703s | 140,090 | 42.73% |
NOTES
- oxipng
--opt max --zopfli
gives the same size with and without--fast
.
pschmidt.png
A test image created by Paul Schmidt, member of the PNG Development Group. It has 16,777,216 unique colors, which is the maximum number of colors for the most common “full color” PNG format (three 8-bit channels for red, green, and blue).
- Filename: pschmidt.png
- Original size: 59,852 bytes
- Dimensions: 4096 × 4096 pixels
- Number of colors: 16,777,216
- Source: www.libpng.org/pub/png/img_png/16million-pschmidt.png
- Original filename: 16million-pschmidt.png
COMPRESSION RESULTS FOR pschmidt.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 2.509s | 59,591 | 0.44% |
optipng -o7 | 32.161s | 59,457 | 0.66% |
oxipng default | 1.411s | 59,840 | 0.02% |
oxipng --opt max | 2.770s | 57,757 | 3.50% |
oxipng --opt max --zopfli --fast | 309.241s | 55,989 | 6.45% |
oxipng --opt max --zopfli | 408.220s | 55,989 | 6.45% |
FileOptimizer level 2 (fast) | 278.000s | 55,825 | 6.72% |
FileOptimizer level 5 (normal) | 790.000s | 55,746 | 6.85% |
FileOptimizer level 7 (good) | 1159.000s | 55,691 | 6.94% |
FileOptimizer level 9 (best) | 6574.000s | 55,362 | 7.49% |
cwebp (lossless) default | 1.549s | 7,420 | 87.60% |
cwebp (lossless) -z9 | 6.965s | 5,516 | 90.78% |
NOTES
- optipng default beats oxipng default.
- oxipng
--opt max --zopfli
gives the same size with and without--fast
.
radar-chart.png
- Filename: radar-chart.png
- Original size: 121,683 bytes
- Dimensions: 800 × 800 pixels
- Number of colors: 2,039
- Source: https://www.chartjs.org/docs/latest/samples/other-charts/radar.html
COMPRESSION RESULTS FOR radar-chart.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.543s | 75,918 | 37.63% |
optipng -o7 | 5.952s | 75,918 | 37.63% |
oxipng default | 0.283s | 73,402 | 39.69% |
oxipng --opt max | 1.008s | 71,484 | 41.26% |
oxipng --opt max --zopfli --fast | 11.468s | 68,927 | 43.36% |
oxipng --opt max --zopfli | 19.364s | 68,927 | 43.36% |
FileOptimizer level 2 (fast) | 53.000s | 69,148 | 43.18% |
FileOptimizer level 5 (normal) | 54.000s | 68,924 | 43.37% |
FileOptimizer level 7 (good) | 70.000s | 68,924 | 43.37% |
FileOptimizer level 9 (best) | 248.000s | 68,887 | 43.40% |
cwebp (lossless) default | 0.182s | 58,394 | 52.01% |
cwebp (lossless) -z9 | 1.665s | 44,408 | 63.51% |
NOTES
- optipng default and
-o7
give the same size. - oxipng
--opt max --zopfli
gives the same size with and without--fast
. - oxipng best and FileOptimizer best are 0.04 percentage points apart.
spacefun.png
The default wallpaper of Debian 6 (Squeeze). Current Debian has it in SVG format. I exported it to PNG with GIMP v3.0.4.
- Filename: spacefun.png
- Original size: 5,305,726 bytes
- Dimensions: 3840 × 2160 pixels
- Number of colors: 24,501
- Source: packages.debian.org/trixie/desktop-base
- Original filename: /usr/share/desktop-base/spacefun-theme/wallpaper/contents/images/3840x2160.svg
COMPRESSION RESULTS FOR spacefun.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 66.750s | 4,389,224 | 17.26% |
optipng -o7 | 634.668s | 3,586,404 | 32.40% |
oxipng default | 7.958s | 3,267,873 | 38.40% |
oxipng --opt max | 11.882s | 3,270,858 | 38.34% |
oxipng --opt max --zopfli --fast | 430.480s | 3,240,291 | 38.92% |
oxipng --opt max --zopfli | 626.792s | 3,240,291 | 38.92% |
FileOptimizer level 2 (fast) | 1156.000s | 3,316,613 | 37.49% |
FileOptimizer level 5 (normal) | 1470.000s | 3,240,592 | 38.91% |
FileOptimizer level 7 (good) | 1851.000s | 3,240,592 | 38.91% |
FileOptimizer level 9 (best) | 2984.000s | 3,234,116 | 39.03% |
cwebp (lossless) default | 2.778s | 3,534,122 | 33.39% |
cwebp (lossless) -z9 | 21.414s | 3,099,532 | 41.58% |
NOTES
- oxipng default beats
--opt max
. This is not an error. - oxipng
--opt max --zopfli
gives the same size with and without--fast
. - oxipng best and FileOptimizer best are 0.11 percentage points apart.
stripe.com.png
Screenshot of the Stripe homepage taken in Firefox on Windows 11 using the FireShot extension.
- Filename: stripe.com.png
- Original size: 401,189 bytes
- Dimensions: 1678 × 1274 pixels
- Number of colors: 63,894
- Original image: stripe.com.png
COMPRESSION RESULTS FOR stripe.com.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 3.449s | 387,752 | 3.35% |
optipng -o7 | 43.773s | 374,414 | 6.67% |
oxipng default | 0.878s | 337,233 | 15.94% |
oxipng --opt max | 1.897s | 329,505 | 17.87% |
oxipng --opt max --zopfli --fast | 37.605s | 324,339 | 19.16% |
oxipng --opt max --zopfli | 73.949s | 324,339 | 19.16% |
FileOptimizer level 2 (fast) | 141.000s | 326,561 | 18.61% |
FileOptimizer level 5 (normal) | 165.000s | 323,584 | 19.34% |
FileOptimizer level 7 (good) | 206.000s | 322,123 | 19.71% |
FileOptimizer level 9 (best) | 478.000s | 321,437 | 19.88% |
cwebp (lossless) default | 0.462s | 272,116 | 32.17% |
cwebp (lossless) -z9 | 5.542s | 263,618 | 34.29% |
NOTES
- oxipng
--opt max --zopfli
gives the same size with and without--fast
.
vitejs-logo.png
- Filename: vitejs-logo.png
- Original size: 25,663 bytes
- Dimensions: 487 × 480 pixels
- Number of colors: 2,844
- Source: https://commons.wikimedia.org/wiki/File:Vitejs-logo.svg
- Original filename: 487px-Vitejs-logo.svg.png
COMPRESSION RESULTS FOR vitejs-logo.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.147s | 22,750 | 11.35% |
optipng -o7 | 2.175s | 22,750 | 11.35% |
oxipng default | 0.088s | 22,433 | 12.59% |
oxipng --opt max | 0.405s | 22,064 | 14.02% |
oxipng --opt max --zopfli --fast | 3.975s | 21,467 | 16.35% |
oxipng --opt max --zopfli | 10.469s | 21,467 | 16.35% |
FileOptimizer level 2 (fast) | 25.000s | 20,408 | 20.48% |
FileOptimizer level 5 (normal) | 27.000s | 20,175 | 21.39% |
FileOptimizer level 7 (good) | 36.000s | 20,167 | 21.42% |
FileOptimizer level 9 (best) | 198.000s | 20,094 | 21.71% |
cwebp (lossless) default | 0.075s | 19,324 | 24.70% |
cwebp (lossless) -z9 | 1.042s | 16,868 | 34.27% |
NOTES
- oxipng
--opt max --zopfli
gives the same size with and without--fast
. - oxipng and FileOptimizer are 5.36 percentage points apart, which
must have something to do with how the tools in FileOptimizer handle
the alpha channel. Using
--alpha
in oxipng brings the size down to 20,347 bytes (20.71% reduction).
THE ALPHA CHANNEL
oxipng says this about using --alpha
:
“--alpha
can improve compression of images with transparency,
by altering the color values of fully transparent pixels. This is generally recommended,
but take care as this is technically a lossy transformation
and may be unsuitable for some specific applications.”
In my tests for this image --alpha
improved the size in two of the four configurations:
- When used with
--opt max
. - When used with
--opt max --zopfli
.
wsl-logo.png
The official WSL logo.
- Filename: wsl-logo.png
- Original size: 19,038 bytes
- Dimensions: 256 × 256 pixels
- Number of colors: 1,623
- Source: github.com/microsoft/WSL/tree/master/Images
- Original filename: Square44x44Logo.targetsize-256
COMPRESSION RESULTS FOR wsl-logo.png
Program and settings | Time | Size | Reduction |
---|---|---|---|
optipng default | 0.119s | 19,038 | 0.00% |
optipng -o7 | 1.930s | 19,038 | 0.00% |
oxipng default | 0.073s | 17,906 | 5.95% |
oxipng --opt max | 0.161s | 17,018 | 10.61% |
oxipng --opt max --zopfli --fast | 2.275s | 16,655 | 12.52% |
oxipng --opt max --zopfli | 3.163s | 16,655 | 12.52% |
FileOptimizer level 2 (fast) | 35.000s | 16,615 | 12.73% |
FileOptimizer level 5 (normal) | 30.000s | 16,412 | 13.79% |
FileOptimizer level 7 (good) | 34.000s | 16,394 | 13.89% |
FileOptimizer level 9 (best) | 73.000s | 16,338 | 14.18% |
cwebp (lossless) default | 0.049s | 12,980 | 31.82% |
cwebp (lossless) -z9 | 0.597s | 12,544 | 34.11% |
NOTES
- It seems this image was already optimized, probably with optipng.
- oxipng
--opt max --zopfli
gives the same size with and without--fast
. - oxipng best with
--alpha
is 16,535 bytes (13.15% reduction). See above about using--alpha
.
In my tests for this image --alpha
improved the size in all four oxipng configurations.
Hardware, operating systems, and tools used in the tests
HARDWARE
- AMD Ryzen 7 5700G (8 cores, 16 threads, up to 4.67 GHz)
- 64 GB RAM (2×32 GB DDR4-3600, dual-channel)
- Samsung 970 EVO Plus NVMe SSD (ext4 partition on Linux, NTFS partition on Windows)
OPERATING SYSTEMS
- Debian 13 (Trixie), kernel 6.12.38
- Windows 11 PRO 26100.4946 (24H2)
COMPRESSION TOOLS
- optipng 0.7.8 (version in Debian 13)
- oxipng 9.1.5 (version in Debian 13)
- FileOptimizer 17.10.2857 for Windows, which uses:
- ECT 0.9.5
- oxipng 9.1.5
- PngOptimizer 2.7
- PNGOUT 2015-02-13
- pngwolf
- pngwolf-zopli 1.1.2
- TruePNG 0.6.2.5
- cwebp 1.5.0 (version in Debian 13)
— Demetris, 2025-09-11