1
0
mirror of https://github.com/imgproxy/imgproxy.git synced 2025-02-02 11:34:20 +02:00

Add blur and sharpening

This commit is contained in:
DarthSim 2018-09-07 20:46:16 +06:00
parent c5adf1b3a5
commit 7d7bbe3649
3 changed files with 82 additions and 0 deletions

View File

@ -304,6 +304,20 @@ func processImage(data []byte, imgtype imageType, po processingOptions, t *timer
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)
}
@ -426,6 +440,28 @@ func vipsSmartCrop(img **C.struct__VipsImage, width, height int) error {
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 {
var tmp *C.struct__VipsImage

View File

@ -214,6 +214,34 @@ func applyGravityOption(po *processingOptions, args []string) error {
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 {
if !vipsTypeSupportSave[imgType] {
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 {
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

10
vips.h
View File

@ -180,6 +180,16 @@ vips_smartcrop_go(VipsImage *in, VipsImage **out, int width, int height) {
#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
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);