imaginary
imaginary copied to clipboard
Bad PNG compression
All pngs that i try to compress always have bigger size than original. If the image was compressed after processing the size can be bigger in 4 times. So it's unavailable to use in production even with compression level = 9.
Is there anyways to improve PNG compression?
I use fit/resize/convert commands with URL file source in official docker image
Original test-photo used by Vivek Sharma -- https://unsplash.com/photos/lYZRq-3QoRA
There is clearly something off with PNG compression:
Imaginary | Size | Size | libvips |
---|---|---|---|
test-500x325-imaginary-compression_1.png | 384 | 344 | test-500x325-vipsthumbnail-compression_1.png |
test-500x325-imaginary-compression_2.png | 384 | 340 | test-500x325-vipsthumbnail-compression_2.png |
test-500x325-imaginary-compression_3.png | 384 | 332 | test-500x325-vipsthumbnail-compression_3.png |
test-500x325-imaginary-compression_4.png | 384 | 316 | test-500x325-vipsthumbnail-compression_4.png |
test-500x325-imaginary-compression_5.png | 384 | 312 | test-500x325-vipsthumbnail-compression_5.png |
test-500x325-imaginary-compression_6.png | 384 | 308 | test-500x325-vipsthumbnail-compression_6.png |
test-500x325-imaginary-compression_7.png | 384 | 308 | test-500x325-vipsthumbnail-compression_7.png |
test-500x325-imaginary-compression_8.png | 384 | 304 | test-500x325-vipsthumbnail-compression_8.png |
test-500x325-imaginary-compression_9.png | 384 | 320 | test-500x325-vipsthumbnail-compression_9.png |
libvips commandline:
for compression in $(seq 1 9);
do
vips VipsForeignSavePngFile test-500x325-vipsthumbnail.png test-500x325-vipsthumbnail-compression_${compression}.png --compression ${compression};
done
Imaginary commandline:
for compression in $(seq 1 9);
do
curl -sv "http://localhost:9000/resize?width=500&nocrop=true&type=png&url=https%3A%2F%2Fimages.unsplash.com%2Fphoto-1548084131-6c908b410378%3Fixlib%3Drb-1.2.1%26q%3D85%26fm%3Djpg%26crop%3Dentropy%26cs%3Dsrgb%26dl%3Dvivek-sharma-1313298-unsplash.jpg&compression=${compression}" > test-500x325-imaginary-compression_${compression}.png;
done
Fileinfo
test-500x325-imaginary-compression_1.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_2.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_3.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_4.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_5.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_6.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_7.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_8.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-imaginary-compression_9.png: PNG image data, 500 x 325, 8-bit/color RGB, non-interlaced
test-500x325-vipsthumbnail-compression_1.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_2.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_3.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_4.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_5.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_6.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_7.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_8.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
test-500x325-vipsthumbnail-compression_9.png: PNG image data, 500 x 325, 8-bit/color RGBA, non-interlaced
I'm running on libvips 8.7.2-Wed Dec 5 17:37:43 UTC 2018 And I've followed it back to the bridge:
vips_pngsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int compression, int quality, int interlace) {
return vips_pngsave_buffer(in, buf, len,
"strip", INT_TO_GBOOLEAN(strip),
"compression", compression,
"interlace", INT_TO_GBOOLEAN(interlace),
"filter", VIPS_FOREIGN_PNG_FILTER_NONE,
NULL
);
And the documentation of vips_pngsave_buffer()
is pretty clear on the topic. So I don't understand at this point where things go wrong.
Possibly related to #240