From c1f2667c0f1089289721c373096eeadcd3bd21af Mon Sep 17 00:00:00 2001 From: Yoan Blanc Date: Tue, 12 Sep 2017 10:36:34 -0400 Subject: [PATCH] Adding trim operation. Closes #22 Signed-off-by: Yoan Blanc --- README.md | 3 ++- fixtures/transparent_trim.png | Bin 0 -> 80401 bytes image.go | 7 +++++++ image_test.go | 24 ++++++++++++++++++++++-- options.go | 1 + resizer.go | 10 ++++++++-- vips.go | 16 ++++++++++++++++ vips.h | 8 ++++++++ 8 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 fixtures/transparent_trim.png diff --git a/README.md b/README.md index 6c687605..17f8037d 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ If you're using `gopkg.in`, you can still rely in the `v0` without worrying abou - Resize - Enlarge -- Crop (including smart crop support) +- Crop (including smart crop support, libvips 8.5+) - Rotate (with auto-rotate based on EXIF orientation) - Flip (with auto-flip based on EXIF metadata) - Flop @@ -47,6 +47,7 @@ If you're using `gopkg.in`, you can still rely in the `v0` without worrying abou - Custom output color space (RGB, grayscale...) - Format conversion (with additional quality/compression settings) - EXIF metadata (size, alpha channel, profile, orientation...) +- Trim (libvips 8.6+) ## Prerequisites diff --git a/fixtures/transparent_trim.png b/fixtures/transparent_trim.png new file mode 100644 index 0000000000000000000000000000000000000000..80878106801520d54349f1f87696f7e3adf9b174 GIT binary patch literal 80401 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 literal 0 HcmV?d00001 diff --git a/image.go b/image.go index 7cff0791..093d5a5a 100644 --- a/image.go +++ b/image.go @@ -178,6 +178,13 @@ func (i *Image) Colourspace(c Interpretation) ([]byte, error) { return i.Process(options) } +// Trim removes the background from the picture. It can result in a 0x0 output +// if the image is all background. +func (i *Image) Trim() ([]byte, error) { + options := Options{Trim: true} + return i.Process(options) +} + // Process processes the image based on the given transformation options, // talking with libvips bindings accordingly and returning the resultant // image buffer. diff --git a/image_test.go b/image_test.go index aff3d3d3..e7c431b2 100644 --- a/image_test.go +++ b/image_test.go @@ -457,8 +457,8 @@ func TestFluentInterface(t *testing.T) { func TestImageSmartCrop(t *testing.T) { - if !(VipsMajorVersion >= 8 && VipsMinorVersion > 4) { - t.Skipf("Skipping this test, libvips doesn't meet version requirement %s > 8.4", VipsVersion) + if !(VipsMajorVersion >= 8 && VipsMinorVersion >= 5) { + t.Skipf("Skipping this test, libvips doesn't meet version requirement %s >= 8.5", VipsVersion) } i := initImage("northern_cardinal_bird.jpg") @@ -475,6 +475,26 @@ func TestImageSmartCrop(t *testing.T) { Write("fixtures/test_smart_crop.jpg", buf) } +func TestImageTrim(t *testing.T) { + + if !(VipsMajorVersion >= 8 && VipsMinorVersion >= 6) { + t.Skipf("Skipping this test, libvips doesn't meet version requirement %s >= 8.6", VipsVersion) + } + + i := initImage("transparent.png") + buf, err := i.Trim() + if err != nil { + t.Errorf("Cannot process the image: %#v", err) + } + + err = assertSize(buf, 250, 208) + if err != nil { + t.Errorf("The image wasn't trimmed.") + } + + Write("fixtures/transparent_trim.png", buf) +} + func TestImageLength(t *testing.T) { i := initImage("test.jpg") diff --git a/options.go b/options.go index f155f5e3..609de606 100644 --- a/options.go +++ b/options.go @@ -205,6 +205,7 @@ type Options struct { NoProfile bool Interlace bool StripMetadata bool + Trim bool Extend Extend Rotate Angle Background Color diff --git a/resizer.go b/resizer.go index 8e7e9c45..eab4d041 100644 --- a/resizer.go +++ b/resizer.go @@ -175,7 +175,8 @@ func normalizeOperation(o *Options, inWidth, inHeight int) { func shouldTransformImage(o Options, inWidth, inHeight int) bool { return o.Force || (o.Width > 0 && o.Width != inWidth) || - (o.Height > 0 && o.Height != inHeight) || o.AreaWidth > 0 || o.AreaHeight > 0 + (o.Height > 0 && o.Height != inHeight) || o.AreaWidth > 0 || o.AreaHeight > 0 || + o.Trim } func shouldApplyEffects(o Options) bool { @@ -268,7 +269,12 @@ func extractOrEmbedImage(image *C.VipsImage, o Options) (*C.VipsImage, error) { left, top := (o.Width-inWidth)/2, (o.Height-inHeight)/2 image, err = vipsEmbed(image, left, top, o.Width, o.Height, o.Extend, o.Background) break - + case o.Trim: + left, top, width, height, err := vipsTrim(image) + if err == nil { + image, err = vipsExtract(image, left, top, width, height) + } + break case o.Top != 0 || o.Left != 0 || o.AreaWidth != 0 || o.AreaHeight != 0: if o.AreaWidth == 0 { o.AreaHeight = o.Width diff --git a/vips.go b/vips.go index 5843df22..1cc27743 100644 --- a/vips.go +++ b/vips.go @@ -503,6 +503,22 @@ func vipsSmartCrop(image *C.VipsImage, width, height int) (*C.VipsImage, error) return buf, nil } +func vipsTrim(image *C.VipsImage) (int, int, int, int, error) { + defer C.g_object_unref(C.gpointer(image)) + + top := C.int(0) + left := C.int(0) + width := C.int(0) + height := C.int(0) + + err := C.vips_find_trim_bridge(image, &top, &left, &width, &height) + if err != 0 { + return 0, 0, 0, 0, catchVipsError() + } + + return int(top), int(left), int(width), int(height), nil +} + func vipsShrinkJpeg(buf []byte, input *C.VipsImage, shrink int) (*C.VipsImage, error) { var image *C.VipsImage var ptr = unsafe.Pointer(&buf[0]) diff --git a/vips.h b/vips.h index 30e68478..f7277519 100644 --- a/vips.h +++ b/vips.h @@ -539,3 +539,11 @@ vips_smartcrop_bridge(VipsImage *in, VipsImage **out, int width, int height) { return 0; #endif } + +int vips_find_trim_bridge(VipsImage *in, int *top, int *left, int *width, int *height) { +#if (VIPS_MAJOR_VERSION >= 8 && VIPS_MINOR_VERSION >= 6) + return vips_find_trim(in, top, left, width, height, NULL); +#else + return 0; +#endif +}