shssoichiro / oxipng

Multithreaded PNG optimizer written in Rust
MIT License
2.84k stars 122 forks source link

Other input formats? #480

Open ILoveGoulash opened 1 year ago

ILoveGoulash commented 1 year ago

Hello, I used to use optipng on the output of long image processing pipelines and when doing so, I chose the simplest possible interchange format to avoid any useless encoding cost. Usually, it was PPM (since I knew my input didn't have an alpha channel).

Would it be possible for oxipng to support at least one such format? Netpbm would probably be the most suitable and the image crate seems to have support for some of them (https://docs.rs/image/latest/image/codecs/pnm/index.html).

For an idea of the "cost" of using PNG in this situation (multiplied by num_images / num_cpu):

$ magick identify /tmp/tmp.ppm
/tmp/tmp.ppm PPM 5551x6380 5551x6380+0+0 8-bit sRGB 101.324MiB 0.120u 0:00.087
$ time magick convert -define png:compression-level=0 /tmp/tmp.ppm /tmp/tmp.png
magick convert -define png:compression-level=0 /tmp/tmp.ppm /tmp/tmp.png  1.72s user 0.16s system 182% cpu 1.033 total
$ time magick convert /tmp/tmp.ppm /tmp/tmp2.ppm
magick convert /tmp/tmp.ppm /tmp/tmp2.ppm  0.19s user 0.11s system 99% cpu 0.300 total
$ time magick convert /tmp/tmp.ppm /tmp/tmp.pam
magick convert /tmp/tmp.ppm /tmp/tmp.pam  0.18s user 0.11s system 99% cpu 0.289 total
$ time magick convert /tmp/tmp.ppm /tmp/tmp.miff
magick convert /tmp/tmp.ppm /tmp/tmp.miff  0.19s user 0.11s system 99% cpu 0.302 total
TPS commented 1 year ago

Maybe work on https://github.com/shssoichiro/oxipng/issues/376 might help this (or vice versa)?

ILoveGoulash commented 1 year ago

It is definitely related, at least for internal code structure matters.

chrispy-snps commented 1 year ago

I would also be interested in support for GIF and BMP as input formats.

Vasilich commented 1 year ago

I would also be interested in support for GIF and BMP as input formats.

what do you want to optimize on BMP format, that has no compression?

chrispy-snps commented 1 year ago

what do you want to optimize on BMP format, that has no compression?

I want to convert them to PNG, then optimize them. It can be done with sequential commands (convert then oxipng), but there is convenience in integrating the format support so things like xargs and parallel can be more easily used.

TPS commented 1 year ago

what do you want to optimize on BMP format, that has no compression?

@Vasilich FYI, BMP has optional simple compression. šŸ™‡šŸ¾ā€ā™‚ļø