|
@@ -318,8 +318,12 @@ func transformImage(ctx context.Context, img **C.VipsImage, data []byte, po *pro
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- if err = vipsFixColourspace(img); err != nil {
|
|
|
- return err
|
|
|
+ convertToLinear := scale != 1 || po.Dpr != 1
|
|
|
+
|
|
|
+ if convertToLinear {
|
|
|
+ if err = vipsLinearColourspace(img); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if scale != 1 {
|
|
@@ -405,6 +409,12 @@ func transformImage(ctx context.Context, img **C.VipsImage, data []byte, po *pro
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if convertToLinear {
|
|
|
+ if err = vipsFixColourspace(img); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if po.Expand && (po.Width > int((*img).Xsize) || po.Height > int((*img).Ysize)) {
|
|
|
if err = vipsEnsureAlpha(img); err != nil {
|
|
|
return err
|
|
@@ -874,6 +884,19 @@ func vipsImportColourProfile(img **C.VipsImage) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+func vipsLinearColourspace(img **C.VipsImage) error {
|
|
|
+ var tmp *C.VipsImage
|
|
|
+
|
|
|
+ if C.vips_image_guess_interpretation(*img) != C.VIPS_INTERPRETATION_scRGB {
|
|
|
+ if C.vips_colourspace_go(*img, &tmp, C.VIPS_INTERPRETATION_scRGB) != 0 {
|
|
|
+ return vipsError()
|
|
|
+ }
|
|
|
+ C.swap_and_clear(img, tmp)
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
func vipsFixColourspace(img **C.VipsImage) error {
|
|
|
var tmp *C.VipsImage
|
|
|
|