1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-02-02 11:34:20 +02:00

Fix PNG quantization with vips 8.10+

This commit is contained in:
DarthSim 2021-03-30 21:54:15 +06:00
parent c7fcb9b94f
commit 7e4ae9d0ce
2 changed files with 21 additions and 3 deletions

22
vips.c
View File

@ -1,5 +1,6 @@
#include "vips.h"
#include <string.h>
#include <math.h>
#define VIPS_SUPPORT_SMARTCROP \
(VIPS_MAJOR_VERSION > 8 || (VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION >= 5))
@ -43,6 +44,9 @@
#define VIPS_SUPPORT_FIND_TRIM \
(VIPS_MAJOR_VERSION > 8 || (VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION >= 6))
#define VIPS_SUPPORT_PNG_BITDEPTH \
(VIPS_MAJOR_VERSION > 8 || (VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION >= 10))
#define EXIF_ORIENTATION "exif-ifd0-Orientation"
#if (VIPS_MAJOR_VERSION > 8 || (VIPS_MAJOR_VERSION == 8 && VIPS_MINOR_VERSION >= 8))
@ -642,15 +646,29 @@ vips_jpegsave_go(VipsImage *in, void **buf, size_t *len, int quality, int interl
int
vips_pngsave_go(VipsImage *in, void **buf, size_t *len, int interlace, int quantize, int colors) {
if (!quantize)
return vips_pngsave_buffer(
in, buf, len,
"filter", VIPS_FOREIGN_PNG_FILTER_NONE,
"interlace", interlace,
NULL
);
int bitdepth = ceil(log2(colors));
return vips_pngsave_buffer(
in, buf, len,
"filter", VIPS_FOREIGN_PNG_FILTER_NONE,
"interlace", interlace,
#if VIPS_SUPPORT_PNG_QUANTIZATION
#if VIPS_SUPPORT_PNG_BITDEPTH
"palette", quantize,
"bitdepth", bitdepth,
#elif VIPS_SUPPORT_PNG_QUANTIZATION // VIPS_SUPPORT_PNG_BITDEPTH
"palette", quantize,
"colours", colors,
#endif // VIPS_SUPPORT_PNG_QUANTIZATION
NULL);
NULL
);
}
int

View File

@ -2,7 +2,7 @@ package main
/*
#cgo pkg-config: vips
#cgo LDFLAGS: -s -w
#cgo LDFLAGS: -s -w -lm
#cgo CFLAGS: -O3
#include "vips.h"
*/