diff --git a/options.go b/options.go index 11ca0ca..17a1cb4 100644 --- a/options.go +++ b/options.go @@ -209,6 +209,7 @@ type Options struct { Interlace bool StripMetadata bool Trim bool + Lossless bool Extend Extend Rotate Angle Background Color diff --git a/resizer.go b/resizer.go index d1f6453..8d8f204 100644 --- a/resizer.go +++ b/resizer.go @@ -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) diff --git a/vips.go b/vips.go index ad54012..8090581 100644 --- a/vips.go +++ b/vips.go @@ -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: diff --git a/vips.h b/vips.h index 229a0b3..29a2e63 100644 --- a/vips.h +++ b/vips.h @@ -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 ); }