mirror of
https://github.com/talgo-cloud/bimg.git
synced 2026-03-07 21:48:13 -08:00
Merge pull request #374 from Mereng/brightness_contrast
Support brightness and contrast
This commit is contained in:
commit
ffadb9e4b0
4 changed files with 68 additions and 0 deletions
|
|
@ -241,6 +241,8 @@ type Options struct {
|
||||||
Sharpen Sharpen
|
Sharpen Sharpen
|
||||||
Threshold float64
|
Threshold float64
|
||||||
Gamma float64
|
Gamma float64
|
||||||
|
Brightness float64
|
||||||
|
Contrast float64
|
||||||
OutputICC string
|
OutputICC string
|
||||||
InputICC string
|
InputICC string
|
||||||
Palette bool
|
Palette bool
|
||||||
|
|
|
||||||
34
resizer.go
34
resizer.go
|
|
@ -142,6 +142,18 @@ func resizer(buf []byte, o Options) ([]byte, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Apply brightness, if necessary
|
||||||
|
image, err = applyBrightness(image, o)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply contrast, if necessary
|
||||||
|
image, err = applyContrast(image, o)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return saveImage(image, o)
|
return saveImage(image, o)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -621,3 +633,25 @@ func getAngle(angle Angle) Angle {
|
||||||
}
|
}
|
||||||
return Angle(math.Min(float64(angle), 270))
|
return Angle(math.Min(float64(angle), 270))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func applyBrightness(image *C.VipsImage, o Options) (*C.VipsImage, error) {
|
||||||
|
var err error
|
||||||
|
if o.Brightness != 0 {
|
||||||
|
image, err = vipsBrightness(image, o.Brightness)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return image, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyContrast(image *C.VipsImage, o Options) (*C.VipsImage, error) {
|
||||||
|
var err error
|
||||||
|
if o.Contrast > 0 {
|
||||||
|
image, err = vipsContrast(image, o.Contrast)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return image, nil
|
||||||
|
}
|
||||||
|
|
|
||||||
22
vips.go
22
vips.go
|
|
@ -847,3 +847,25 @@ func vipsGamma(image *C.VipsImage, Gamma float64) (*C.VipsImage, error) {
|
||||||
}
|
}
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func vipsBrightness(image *C.VipsImage, brightness float64) (*C.VipsImage, error) {
|
||||||
|
var out *C.VipsImage
|
||||||
|
defer C.g_object_unref(C.gpointer(image))
|
||||||
|
|
||||||
|
err := C.vips_brightness_bridge(image, &out, C.double(brightness))
|
||||||
|
if err != 0 {
|
||||||
|
return nil, catchVipsError()
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func vipsContrast(image *C.VipsImage, contrast float64) (*C.VipsImage, error) {
|
||||||
|
var out *C.VipsImage
|
||||||
|
defer C.g_object_unref(C.gpointer(image))
|
||||||
|
|
||||||
|
err := C.vips_contrast_bridge(image, &out, C.double(contrast))
|
||||||
|
if err != 0 {
|
||||||
|
return nil, catchVipsError()
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
|
||||||
10
vips.h
10
vips.h
|
|
@ -677,3 +677,13 @@ int vips_gamma_bridge(VipsImage *in, VipsImage **out, double exponent)
|
||||||
{
|
{
|
||||||
return vips_gamma(in, out, "exponent", 1.0 / exponent, NULL);
|
return vips_gamma(in, out, "exponent", 1.0 / exponent, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vips_brightness_bridge(VipsImage *in, VipsImage **out, double k)
|
||||||
|
{
|
||||||
|
return vips_linear1(in, out, 1.0 , k, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
int vips_contrast_bridge(VipsImage *in, VipsImage **out, double k)
|
||||||
|
{
|
||||||
|
return vips_linear1(in, out, k , 0.0, NULL);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue