MCPcopy Create free account
hub / github.com/imgproxy/imgproxy / Save

Method Save

vips/vips.go:336–392  ·  view source on GitHub ↗
(
	imgtype imagetype.Type,
	quality int,
	o *options.Options,
)

Source from the content-addressed store, hash-verified

334}
335
336func (img *Image) Save(
337 imgtype imagetype.Type,
338 quality int,
339 o *options.Options,
340) (imagedata.ImageData, error) {
341 target := C.vips_target_new_to_memory()
342
343 cancel := func() {
344 C.vips_unref_target(target)
345 }
346
347 so := newSaveOptions(o)
348
349 err := C.int(0) //nolint:wastedassign
350 imgsize := C.size_t(0)
351
352 switch imgtype {
353 case imagetype.JPEG:
354 err = C.vips_jpegsave_go(img.VipsImage, target, C.int(quality), so)
355 case imagetype.JXL:
356 err = C.vips_jxlsave_go(img.VipsImage, target, C.int(quality), so)
357 case imagetype.PNG:
358 err = C.vips_pngsave_go(img.VipsImage, target, so)
359 case imagetype.WEBP:
360 err = C.vips_webpsave_go(img.VipsImage, target, C.int(quality), so)
361 case imagetype.GIF:
362 err = C.vips_gifsave_go(img.VipsImage, target, so)
363 case imagetype.HEIC:
364 err = C.vips_heifsave_go(img.VipsImage, target, C.int(quality), so)
365 case imagetype.AVIF:
366 err = C.vips_avifsave_go(img.VipsImage, target, C.int(quality), so)
367 case imagetype.TIFF:
368 err = C.vips_tiffsave_go(img.VipsImage, target, C.int(quality), so)
369 case imagetype.BMP:
370 err = C.vips_bmpsave_target_go(img.VipsImage, target, so)
371 case imagetype.ICO:
372 err = C.vips_icosave_target_go(img.VipsImage, target, so)
373 default:
374 // NOTE: probably, it would be better to use defer unref + additionally ref the target
375 // before passing it to the imagedata.ImageData
376 cancel()
377 return nil, newVipsError("Usupported image type to save")
378 }
379 if err != 0 {
380 cancel()
381 return nil, Error()
382 }
383
384 var ptr = C.vips_blob_get(target.blob, &imgsize)
385
386 b := unsafe.Slice((*byte)(ptr), int(imgsize))
387
388 i := imagedata.NewFromBytesWithFormat(imgtype, b)
389 i.AddCancel(cancel)
390
391 return i, nil
392}
393

Callers 2

saveImageToFitBytesFunction · 0.80
saveImageMethod · 0.80

Calls 5

NewFromBytesWithFormatFunction · 0.92
newSaveOptionsFunction · 0.85
newVipsErrorFunction · 0.85
ErrorFunction · 0.70
AddCancelMethod · 0.65

Tested by

no test coverage detected