Help us shape the future of Go! Take the 2026 Go Developer Survey

cutter

package module
v0.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2018 License: MIT Imports: 2 Imported by: 148

README

Cutter

A Go library to crop images.

Build Status GoDoc

Cutter was initially developped to be able to crop image resized using github.com/nfnt/resize.

Usage

Read the doc on https://godoc.org/github.com/oliamb/cutter

Import package with

import "github.com/oliamb/cutter"

Package cutter provides a function to crop image.

By default, the original image will be cropped at the given size from the top left corner.

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width:  250,
  Height: 500,
})

Most of the time, the cropped image will share some memory with the original, so it should be used read only. You must ask explicitely for a copy if nedded.

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width:  250,
  Height: 500,
  Options: cutter.Copy,
})

It is possible to specify the top left position:

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width:  250,
  Height: 500,
  Anchor: image.Point{100, 100},
  Mode:   cutter.TopLeft, // optional, default value
})

The Anchor property can represents the center of the cropped image instead of the top left corner:

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width: 250,
  Height: 500,
  Mode: cutter.Centered,
})

The default crop use the specified dimension, but it is possible to use Width and Heigth as a ratio instead. In this case, the resulting image will be as big as possible to fit the asked ratio from the anchor position.

croppedImg, err := cutter.Crop(baseImage, cutter.Config{
  Width: 4,
  Height: 3,
  Mode: cutter.Centered,
  Options: cutter.Ratio&cutter.Copy, // Copy is useless here
})

About resize

This lib only manage crop and won't resize image, but it works great in combination with github.com/nfnt/resize

Contributing

I'd love to see your contributions to Cutter. If you'd like to hack on it:

  • fork the project,
  • hack on it,
  • ensure tests pass,
  • make a pull request

If you plan to modify the API, let's disscuss it first.

Licensing

MIT License, Please see the file called LICENSE.

Credits

Test Picture: Gopher picture from Heidi Schuyt, http://www.flickr.com/photos/hschuyt/7674222278/, © copyright Creative Commons(http://creativecommons.org/licenses/by-nc-sa/2.0/)

Thanks to Urturn(http://www.urturn.com) for the time allocated to develop the library.

Documentation

Overview

Package cutter provides a function to crop image.

By default, the original image will be cropped at the given size from the top left corner.

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width:  250,
  Height: 500,
})

Most of the time, the cropped image will share some memory with the original, so it should be used read only. You must ask explicitely for a copy if nedded.

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width:  250,
  Height: 500,
  Options: Copy,
})

It is possible to specify the top left position:

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width:  250,
  Height: 500,
  Anchor: image.Point{100, 100},
  Mode:   TopLeft, // optional, default value
})

The Anchor property can represents the center of the cropped image instead of the top left corner:

croppedImg, err := cutter.Crop(img, cutter.Config{
  Width: 250,
  Height: 500,
  Mode: Centered,
})

The default crop use the specified dimension, but it is possible to use Width and Heigth as a ratio instead. In this case, the resulting image will be as big as possible to fit the asked ratio from the anchor position.

croppedImg, err := cutter.Crop(baseImage, cutter.Config{
  Width: 4,
  Height: 3,
  Mode: Centered,
  Options: Ratio,
})

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Crop

func Crop(img image.Image, c Config) (image.Image, error)

Crop retrieves an image that is a cropped copy of the original img.

The crop is made given the informations provided in config.

Example
f, err := os.Open("fixtures/gopher.jpg")
if err != nil {
	log.Fatal("Cannot open file", err)
}
img, _, err := image.Decode(f)
if err != nil {
	log.Fatal("Cannot decode image:", err)
}

cImg, err := Crop(img, Config{
	Height:  500,                 // height in pixel or Y ratio(see Ratio Option below)
	Width:   500,                 // width in pixel or X ratio
	Mode:    TopLeft,             // Accepted Mode: TopLeft, Centered
	Anchor:  image.Point{10, 10}, // Position of the top left point
	Options: 0,                   // Accepted Option: Ratio
})

if err != nil {
	log.Fatal("Cannot crop image:", err)
}
fmt.Println("cImg dimension:", cImg.Bounds())
Output:
cImg dimension: (10,10)-(510,510)

Types

type AnchorMode

type AnchorMode int

AnchorMode is an enumeration of the position an anchor can represent.

const (
	// TopLeft defines the Anchor Point
	// as the top left of the cropped picture.
	TopLeft AnchorMode = iota
	// Centered defines the Anchor Point
	// as the center of the cropped picture.
	Centered = iota
)

type Config

type Config struct {
	Width, Height int
	Anchor        image.Point // The Anchor Point in the source image
	Mode          AnchorMode  // Which point in the resulting image the Anchor Point is referring to
	Options       Option
}

Config is used to defined the way the crop should be realized.

type Option

type Option int

Option flags to modify the way the crop is done.

const (
	// Ratio flag is use when Width and Height
	// must be used to compute a ratio rather
	// than absolute size in pixels.
	Ratio Option = 1 << iota
	// Copy flag is used to enforce the function
	// to retrieve a copy of the selected pixels.
	// This disable the use of SubImage method
	// to compute the result.
	Copy = 1 << iota
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL