1
0
DarthSim 6 жил өмнө
parent
commit
7d7bbe3649
3 өөрчлөгдсөн 82 нэмэгдсэн , 0 устгасан
  1. 36 0
      process.go
  2. 36 0
      processing_options.go
  3. 10 0
      vips.h

+ 36 - 0
process.go

@@ -304,6 +304,20 @@ func processImage(data []byte, imgtype imageType, po processingOptions, t *timer
 		t.Check()
 		t.Check()
 	}
 	}
 
 
+	if po.Blur > 0 {
+		if err = vipsBlur(&img, po.Blur); err != nil {
+			return nil, err
+		}
+	}
+
+	if po.Sharpen > 0 {
+		if err = vipsSharpen(&img, po.Sharpen); err != nil {
+			return nil, err
+		}
+	}
+
+	t.Check()
+
 	return vipsSaveImage(img, po.Format)
 	return vipsSaveImage(img, po.Format)
 }
 }
 
 
@@ -426,6 +440,28 @@ func vipsSmartCrop(img **C.struct__VipsImage, width, height int) error {
 	return nil
 	return nil
 }
 }
 
 
+func vipsBlur(img **C.struct__VipsImage, sigma float32) error {
+	var tmp *C.struct__VipsImage
+
+	if C.vips_gaussblur_go(*img, &tmp, C.double(sigma)) != 0 {
+		return vipsError()
+	}
+
+	C.swap_and_clear(img, tmp)
+	return nil
+}
+
+func vipsSharpen(img **C.struct__VipsImage, sigma float32) error {
+	var tmp *C.struct__VipsImage
+
+	if C.vips_sharpen_go(*img, &tmp, C.double(sigma)) != 0 {
+		return vipsError()
+	}
+
+	C.swap_and_clear(img, tmp)
+	return nil
+}
+
 func vipsImportColourProfile(img **C.struct__VipsImage) error {
 func vipsImportColourProfile(img **C.struct__VipsImage) error {
 	var tmp *C.struct__VipsImage
 	var tmp *C.struct__VipsImage
 
 

+ 36 - 0
processing_options.go

@@ -214,6 +214,34 @@ func applyGravityOption(po *processingOptions, args []string) error {
 	return nil
 	return nil
 }
 }
 
 
+func applyBlurOption(po *processingOptions, args []string) error {
+	if len(args) > 1 {
+		return fmt.Errorf("Invalid blur arguments: %v", args)
+	}
+
+	if b, err := strconv.ParseFloat(args[0], 32); err == nil || b >= 0 {
+		po.Blur = float32(b)
+	} else {
+		return fmt.Errorf("Invalid blur: %s", args[0])
+	}
+
+	return nil
+}
+
+func applySharpenOption(po *processingOptions, args []string) error {
+	if len(args) > 1 {
+		return fmt.Errorf("Invalid sharpen arguments: %v", args)
+	}
+
+	if s, err := strconv.ParseFloat(args[0], 32); err == nil || s >= 0 {
+		po.Sharpen = float32(s)
+	} else {
+		return fmt.Errorf("Invalid sharpen: %s", args[0])
+	}
+
+	return nil
+}
+
 func applyFormatOption(po *processingOptions, imgType imageType) error {
 func applyFormatOption(po *processingOptions, imgType imageType) error {
 	if !vipsTypeSupportSave[imgType] {
 	if !vipsTypeSupportSave[imgType] {
 		return errors.New("Resulting image type not supported")
 		return errors.New("Resulting image type not supported")
@@ -250,6 +278,14 @@ func applyProcessingOption(po *processingOptions, name string, args []string) er
 		if err := applyGravityOption(po, args); err != nil {
 		if err := applyGravityOption(po, args); err != nil {
 			return err
 			return err
 		}
 		}
+	case "blur":
+		if err := applyBlurOption(po, args); err != nil {
+			return err
+		}
+	case "sharpen":
+		if err := applySharpenOption(po, args); err != nil {
+			return err
+		}
 	}
 	}
 
 
 	return nil
 	return nil

+ 10 - 0
vips.h

@@ -180,6 +180,16 @@ vips_smartcrop_go(VipsImage *in, VipsImage **out, int width, int height) {
 #endif
 #endif
 }
 }
 
 
+int
+vips_gaussblur_go(VipsImage *in, VipsImage **out, double sigma) {
+  return vips_gaussblur(in, out, sigma, NULL);
+}
+
+int
+vips_sharpen_go(VipsImage *in, VipsImage **out, double sigma) {
+  return vips_sharpen(in, out, "sigma", sigma, NULL);
+}
+
 int
 int
 vips_extract_area_go(VipsImage *in, VipsImage **out, int left, int top, int width, int height) {
 vips_extract_area_go(VipsImage *in, VipsImage **out, int left, int top, int width, int height) {
   return vips_extract_area(in, out, left, top, width, height, NULL);
   return vips_extract_area(in, out, left, top, width, height, NULL);