muesli/smartcrop
smartcrop finds good image crops for arbitrary crop sizes
repo name | muesli/smartcrop |
repo link | https://github.com/muesli/smartcrop |
homepage | |
language | Go |
size (curr.) | 22128 kB |
stars (curr.) | 1337 |
created | 2014-04-07 |
license | MIT License |
smartcrop
smartcrop finds good image crops for arbitrary sizes. It is a pure Go implementation, based on Jonas Wagner’s smartcrop.js
Image: https://www.flickr.com/photos/usfwspacific/8182486789 by Washington Dept of Fish and Wildlife, originally licensed under CC-BY-2.0 when the image was imported back in September 2014
Image: https://www.flickr.com/photos/endogamia/5682480447 by Leon F. Cabeiro (N. Feans), licensed under CC-BY-2.0
Installation
Make sure you have a working Go environment (Go 1.9 or higher is required). See the install instructions.
To install smartcrop, simply run:
go get github.com/muesli/smartcrop
To compile it from source:
cd $GOPATH/src/github.com/muesli/smartcrop
go get -u -v
go build && go test -v
Example
package main
import (
"fmt"
"image"
_ "image/png"
"os"
"github.com/muesli/smartcrop"
"github.com/muesli/smartcrop/nfnt"
)
func main() {
f, _ := os.Open("image.png")
img, _, _ := image.Decode(f)
analyzer := smartcrop.NewAnalyzer(nfnt.NewDefaultResizer())
topCrop, _ := analyzer.FindBestCrop(img, 250, 250)
// The crop will have the requested aspect ratio, but you need to copy/scale it yourself
fmt.Printf("Top crop: %+v\n", topCrop)
type SubImager interface {
SubImage(r image.Rectangle) image.Image
}
croppedimg := img.(SubImager).SubImage(topCrop)
// ...
}
Also see the test cases in smartcrop_test.go and cli application in cmd/smartcrop/ for further working examples.
Simple CLI application
cd $GOPATH/src/github.com/muesli/smartcrop
go install ./cmd/smartcrop
Usage of smartcrop:
-height int
crop height
-input string
input filename
-output string
output filename
-quality int
jpeg quality (default 85)
-resize
resize after cropping (default true)
-width int
crop width
Example: smartcrop -input examples/gopher.jpg -output gopher_cropped.jpg -width 300 -height 150
Sample Data
You can find a bunch of test images for the algorithm here.
Development
Join us on IRC: irc.freenode.net/#smartcrop