package processing import ( "github.com/imgproxy/imgproxy/v3/imagedata" "github.com/imgproxy/imgproxy/v3/options" "github.com/imgproxy/imgproxy/v3/vips" ) func exportColorProfile(pctx *pipelineContext, img *vips.Image, po *options.ProcessingOptions, imgdata *imagedata.ImageData) error { keepProfile := !po.StripColorProfile && po.Format.SupportsColourProfile() if img.IsLinear() { if err := img.RgbColourspace(); err != nil { return err } } // vips 8.15+ tends to lose the colour profile during some color conversions. // We probably have a backup of the colour profile, so we need to restore it. img.RestoreColourProfile() if img.ColourProfileImported() { if keepProfile { // We imported ICC profile and want to keep it, // so we need to export it if err := img.ExportColourProfile(); err != nil { return err } } else { // We imported ICC profile but don't want to keep it, // so we need to export image to sRGB for maximum compatibility if err := img.ExportColourProfileToSRGB(); err != nil { return err } } } else if !keepProfile { // We don't import ICC profile and don't want to keep it, // so we need to transform it to sRGB for maximum compatibility if err := img.TransformColourProfile(); err != nil { return err } } if !keepProfile { return img.RemoveColourProfile() } return nil }