Update Readme (#767)
This commit is contained in:
parent
015d31e6a1
commit
4a537c087d
1 changed files with 15 additions and 43 deletions
58
README.md
58
README.md
|
|
@ -8,7 +8,7 @@
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
Oxipng is a multithreaded lossless PNG/APNG compression optimizer. It can be used via a command-line
|
Oxipng is a multithreaded lossless PNG/APNG compression optimizer. It can be used via a command-line
|
||||||
interface or as a library in other Rust programs.
|
interface or as a library in other Rust programs. It is fast and highly effective.
|
||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
|
|
@ -78,6 +78,13 @@ are almost always better or equal to lower levels, this is not guaranteed and it
|
||||||
rare circumstances that a lower level may give a marginally smaller output. Similarly, using Zopfli
|
rare circumstances that a lower level may give a marginally smaller output. Similarly, using Zopfli
|
||||||
compression (`-z`) is not guaranteed to always be better than without.
|
compression (`-z`) is not guaranteed to always be better than without.
|
||||||
|
|
||||||
|
## APNG support
|
||||||
|
|
||||||
|
Oxipng currently only supports limited optimization of animated PNGs (APNGs). It can perform
|
||||||
|
alpha-optimization, refiltering and recompression of all frames, but all transformations will be
|
||||||
|
disabled. For best results, it is recommended to use another tool such as
|
||||||
|
[apngopt](https://sourceforge.net/projects/apng/files/APNG_Optimizer/) prior to running Oxipng.
|
||||||
|
|
||||||
## Git integration via [pre-commit]
|
## Git integration via [pre-commit]
|
||||||
|
|
||||||
Create a `.pre-commit-config.yaml` file like this, or add the lines after the `repos` map
|
Create a `.pre-commit-config.yaml` file like this, or add the lines after the `repos` map
|
||||||
|
|
@ -131,17 +138,13 @@ and specifying the desired ones, for example:
|
||||||
|
|
||||||
## History
|
## History
|
||||||
|
|
||||||
Oxipng began as a complete rewrite of the OptiPNG project,
|
Oxipng began in 2015 as a rewrite of the OptiPNG project. The core goal was to implement
|
||||||
which was assumed to be dead as no commit had been made to it since March 2014.
|
multithreading, which would have been very difficult to do within the existing C codebase of OptiPNG.
|
||||||
(OptiPNG has since released a new version, after Oxipng was first released.)
|
|
||||||
The name has been changed to avoid confusion and potential legal issues.
|
|
||||||
|
|
||||||
The core goal of rewriting OptiPNG was to implement multithreading,
|
|
||||||
which would be very difficult to do within the existing C codebase of OptiPNG.
|
|
||||||
This also served as an opportunity to choose a more modern, safer language (Rust).
|
This also served as an opportunity to choose a more modern, safer language (Rust).
|
||||||
|
|
||||||
Note that, while similar, Oxipng is not a drop-in replacement for OptiPNG.
|
However, Oxipng has evolved considerably since then. While some of the options remain similar to
|
||||||
If you are migrating from OptiPNG, please check the [help](MANUAL.txt) before using.
|
OptiPNG, the architecture and capabilities are now quite different. It is not a drop-in
|
||||||
|
replacement - if you are migrating from OptiPNG, please check the [help](MANUAL.txt) before using.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|
@ -157,36 +160,5 @@ Oxipng is open-source software, distributed under the MIT license.
|
||||||
|
|
||||||
## Benchmarks
|
## Benchmarks
|
||||||
|
|
||||||
Tested Oxipng 9.0.0 (commit `c16519b38b0519988db625913be919d4f0e42f5d`, compiled
|
An independent benchmark conducted by @demetris is linked here with permission:\
|
||||||
on `rustc 1.74.0-nightly (7b4d9e155 2023-09-28)`) against OptiPNG version 0.7.7,
|
[oxipng and friends: A comparison of PNG optimization tools](https://op111.net/posts/2025/09/png-compression-oxipng-optipng-fileoptimizer-cwebp/)
|
||||||
as packaged by Debian unstable, on a Linux 6.5.0-2-amd64 kernel, Intel Core
|
|
||||||
i7-12700 CPU (8 performance cores, 4 efficiency cores, 20 threads), DDR5-5200
|
|
||||||
RAM in dual channel configuration.
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Benchmark 1: ./target/release/oxipng -P ./tests/files/rgb_16_should_be_grayscale_8.png
|
|
||||||
Time (mean ± σ): 59.6 ms ± 7.7 ms [User: 77.4 ms, System: 3.6 ms]
|
|
||||||
Range (min … max): 53.3 ms … 89.9 ms 32 runs
|
|
||||||
|
|
||||||
Benchmark 2: optipng -simulate ./tests/files/rgb_16_should_be_grayscale_8.png
|
|
||||||
Time (mean ± σ): 132.4 ms ± 0.8 ms [User: 132.5 ms, System: 0.6 ms]
|
|
||||||
Range (min … max): 131.8 ms … 134.4 ms 22 runs
|
|
||||||
|
|
||||||
Summary
|
|
||||||
./target/release/oxipng -P ./tests/files/rgb_16_should_be_grayscale_8.png ran
|
|
||||||
2.22 ± 0.29 times faster than optipng -simulate ./tests/files/rgb_16_should_be_grayscale_8.png
|
|
||||||
|
|
||||||
Benchmark 1: ./target/release/oxipng -o4 -P ./tests/files/rgb_16_should_be_grayscale_8.png
|
|
||||||
Time (mean ± σ): 88.7 ms ± 4.3 ms [User: 270.3 ms, System: 11.0 ms]
|
|
||||||
Range (min … max): 86.8 ms … 109.4 ms 26 runs
|
|
||||||
|
|
||||||
Benchmark 2: optipng -o 4 -simulate ./tests/files/rgb_16_should_be_grayscale_8.png
|
|
||||||
Time (mean ± σ): 444.9 ms ± 0.3 ms [User: 444.8 ms, System: 0.7 ms]
|
|
||||||
Range (min … max): 444.4 ms … 445.6 ms 10 runs
|
|
||||||
|
|
||||||
Summary
|
|
||||||
./target/release/oxipng -o4 -P ./tests/files/rgb_16_should_be_grayscale_8.png ran
|
|
||||||
5.01 ± 0.25 times faster than optipng -o 4 -simulate ./tests/files/rgb_16_should_be_grayscale_8.png
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue