Tomas Aparicio 10 years ago
parent fd4fdee2cc
commit 8fdf28fe5e

@ -15,6 +15,9 @@ import (
"unsafe" "unsafe"
) )
// Current libvips version
const VipsVersion = string(C.VIPS_VERSION)
const HasMagickSupport = int(C.VIPS_MAGICK_SUPPORT) == 1 const HasMagickSupport = int(C.VIPS_MAGICK_SUPPORT) == 1
const ( const (
@ -291,7 +294,6 @@ func vipsPreSave(image *C.VipsImage, o *vipsSaveOptions) (*C.VipsImage, error) {
if int(err) != 0 { if int(err) != 0 {
return nil, catchVipsError() return nil, catchVipsError()
} }
C.g_object_unref(C.gpointer(image))
image = outImage 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) { func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) {
defer C.g_object_unref(C.gpointer(image)) defer C.g_object_unref(C.gpointer(image))
image, err := vipsPreSave(image, &o) tmpImage, err := vipsPreSave(image, &o)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer C.g_object_unref(C.gpointer(tmpImage))
length := C.size_t(0) length := C.size_t(0)
saveErr := C.int(0) saveErr := C.int(0)
@ -314,13 +317,13 @@ func vipsSave(image *C.VipsImage, o vipsSaveOptions) ([]byte, error) {
var ptr unsafe.Pointer var ptr unsafe.Pointer
switch o.Type { switch o.Type {
case WEBP: case WEBP:
saveErr = C.vips_webpsave_bridge(image, &ptr, &length, 1, quality) saveErr = C.vips_webpsave_bridge(tmpImage, &ptr, &length, 1, quality)
break break
case PNG: 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 break
default: default:
saveErr = C.vips_jpegsave_bridge(image, &ptr, &length, 1, quality, interlace) saveErr = C.vips_jpegsave_bridge(tmpImage, &ptr, &length, 1, quality, interlace)
break 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) { func vipsShrinkJpeg(buf []byte, input *C.VipsImage, shrink int) (*C.VipsImage, error) {
var image *C.VipsImage var image *C.VipsImage
var ptr = unsafe.Pointer(&buf[0])
defer C.g_object_unref(C.gpointer(input)) 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 { if err != 0 {
return nil, catchVipsError() return nil, catchVipsError()
} }

Loading…
Cancel
Save