cutter

package module
v0.0.0-...-fb8e16e Latest Latest
Warning

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

Go to latest
Published: Aug 9, 2023 License: MIT Imports: 2 Imported by: 0

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
	TopRight    AnchorMode = iota
	BottomLeft  AnchorMode = iota
	BottomRight 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