cutter: github.com/oliamb/cutter Index | Examples | Files | Directories

package cutter

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: 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

Package Files

cutter.go

func Crop Uses

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.

Code:

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)

type AnchorMode Uses

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 Uses

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 Uses

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

PathSynopsis
cutter

Package cutter imports 2 packages (graph) and is imported by 26 packages. Updated 2018-05-30. Refresh now. Tools for package owners.