From 8fdf28fe5e0f0674847a6bfd8fe6d3eee2c78320 Mon Sep 17 00:00:00 2001 From: Tomas Aparicio Date: Tue, 29 Sep 2015 23:37:42 +0100 Subject: [PATCH] fix(#56) --- vips.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/vips.go b/vips.go index f30eb09..248b511 100644 --- a/vips.go +++ b/vips.go @@ -15,6 +15,9 @@ import ( "unsafe" ) +// Current libvips version +const VipsVersion = string(C.VIPS_VERSION) + const HasMagickSupport = int(C.VIPS_MAGICK_SUPPORT) == 1 const ( @@ -291,7 +294,6 @@ func vipsPreSave(image *C.VipsImage, o *vipsSaveOptions) (*C.VipsImage, error) { if int(err) != 0 { return nil, catchVipsError() } - C.g_object_unref(C.gpointer(image)) image = outImage } @@ -301,10 +303,11 @@ func vipsPreSave(image *C.VipsImage, o *vipsSaveOptions) (*C.VipsImage, error) { func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) { defer C.g_object_unref(C.gpointer(image)) - image, err := vipsPreSave(image, &o) + tmpImage, err := vipsPreSave(image, &o) if err != nil { return nil, err } + defer C.g_object_unref(C.gpointer(tmpImage)) length := C.size_t(0) saveErr := C.int(0) @@ -314,13 +317,13 @@ func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) { var ptr unsafe.Pointer switch o.Type { case WEBP: - saveErr = C.vips_webpsave_bridge(image, &ptr, &length, 1, quality) + saveErr = C.vips_webpsave_bridge(tmpImage, &ptr, &length, 1, quality) break case PNG: - saveErr = C.vips_pngsave_bridge(image, &ptr, &length, 1, C.int(o.Compression), quality, interlace) + saveErr = C.vips_pngsave_bridge(tmpImage, &ptr, &length, 1, C.int(o.Compression), quality, interlace) break default: - saveErr = C.vips_jpegsave_bridge(image, &ptr, &length, 1, quality, interlace) + saveErr = C.vips_jpegsave_bridge(tmpImage, &ptr, &length, 1, quality, interlace) break } @@ -355,9 +358,10 @@ func vipsExtract(image *C.VipsImage, left, top, width, height int) (*C.VipsImage func vipsShrinkJpeg(buf []byte, input *C.VipsImage, shrink int) (*C.VipsImage, error) { var image *C.VipsImage + var ptr = unsafe.Pointer(&buf[0]) defer C.g_object_unref(C.gpointer(input)) - err := C.vips_jpegload_buffer_shrink(unsafe.Pointer(&buf[0]), C.size_t(len(buf)), &image, C.int(shrink)) + err := C.vips_jpegload_buffer_shrink(ptr, C.size_t(len(buf)), &image, C.int(shrink)) if err != 0 { return nil, catchVipsError() }