Merge pull request #208 from mikestead/feature/webp-lossless

Add lossless option for saving webp
This commit is contained in:
Tomás 2017-12-22 19:51:54 +01:00 committed by GitHub
commit 262d0f82b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 7 additions and 2 deletions

View file

@ -209,6 +209,7 @@ type Options struct {
Interlace bool
StripMetadata bool
Trim bool
Lossless bool
Extend Extend
Rotate Angle
Background Color

View file

@ -165,6 +165,7 @@ func saveImage(image *C.VipsImage, o Options) ([]byte, error) {
Interpretation: o.Interpretation,
OutputICC: o.OutputICC,
StripMetadata: o.StripMetadata,
Lossless: o.Lossless,
}
// Finally get the resultant buffer
return vipsSave(image, saveOptions)

View file

@ -56,6 +56,7 @@ type vipsSaveOptions struct {
Interlace bool
NoProfile bool
StripMetadata bool
Lossless bool
OutputICC string // Absolute path to the output ICC profile
Interpretation Interpretation
}
@ -423,6 +424,7 @@ func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) {
interlace := C.int(boolToInt(o.Interlace))
quality := C.int(o.Quality)
strip := C.int(boolToInt(o.StripMetadata))
lossless := C.int(boolToInt(o.Lossless))
if o.Type != 0 && !IsTypeSupportedSave(o.Type) {
return nil, fmt.Errorf("VIPS cannot save to %#v", ImageTypes[o.Type])
@ -430,7 +432,7 @@ func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) {
var ptr unsafe.Pointer
switch o.Type {
case WEBP:
saveErr = C.vips_webpsave_bridge(tmpImage, &ptr, &length, strip, quality)
saveErr = C.vips_webpsave_bridge(tmpImage, &ptr, &length, strip, quality, lossless)
case PNG:
saveErr = C.vips_pngsave_bridge(tmpImage, &ptr, &length, strip, C.int(o.Compression), quality, interlace)
case TIFF:

3
vips.h
View file

@ -306,10 +306,11 @@ vips_pngsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int compr
}
int
vips_webpsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int quality) {
vips_webpsave_bridge(VipsImage *in, void **buf, size_t *len, int strip, int quality, int lossless) {
return vips_webpsave_buffer(in, buf, len,
"strip", INT_TO_GBOOLEAN(strip),
"Q", quality,
"lossless", INT_TO_GBOOLEAN(lossless),
NULL
);
}