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:
parent
c5adf1b3a5
commit
7d7bbe3649
36
process.go
36
process.go
@ -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
|
||||
|
||||
|
@ -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
10
vips.h
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user