go-resize/README.md

91 lines
2.0 KiB
Markdown
Raw Normal View History

2012-08-02 22:16:15 +02:00
Resize
2012-08-02 21:48:27 +02:00
======
2012-08-03 20:17:28 +02:00
Image resizing for the [Go programming language](http://golang.org) that includes a few interpolation methods.
2012-08-02 22:16:15 +02:00
2012-08-03 17:41:21 +02:00
Installation
2012-08-03 20:17:28 +02:00
------------
2012-08-03 17:41:21 +02:00
```bash
$ go get github.com/nfnt/resize
```
It's that easy!
Usage
2012-08-03 20:17:28 +02:00
-----
2012-08-03 17:41:21 +02:00
Import package with
```go
import "github.com/nfnt/resize"
```
2012-08-09 19:04:04 +02:00
Resize creates a scaled image with new dimensions (`width`, `height`) using the interpolation function `interp`.
If either `width` or `height` is set to 0, it will be set to an aspect ratio preserving value.
2012-08-03 17:41:21 +02:00
```go
2012-08-09 19:04:04 +02:00
resize.Resize(width, height uint, img image.Image, interp resize.InterpolationFunction) image.Image
2012-08-03 17:41:21 +02:00
```
The provided interpolation functions are
2012-08-03 20:17:28 +02:00
- `NearestNeighbor`: [Nearest-neighbor interpolation](http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation)
- `Bilinear`: [Bilinear interpolation](http://en.wikipedia.org/wiki/Bilinear_interpolation)
- `Bicubic`: [Bicubic interpolation](http://en.wikipedia.org/wiki/Bicubic_interpolation)
- `Lanczos2`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=2
2012-08-03 20:17:28 +02:00
- `Lanczos3`: [Lanczos resampling](http://en.wikipedia.org/wiki/Lanczos_resampling) with a=3
2012-08-03 18:12:26 +02:00
Sample usage:
```go
package main
import (
"github.com/nfnt/resize"
"image/jpeg"
"log"
2012-08-03 18:12:26 +02:00
"os"
)
func main() {
// open "test.jpg"
file, err := os.Open("test.jpg")
if err != nil {
log.Fatal(err)
2012-08-03 18:12:26 +02:00
}
// decode jpeg into image.Image
img, err := jpeg.Decode(file)
if err != nil {
log.Fatal(err)
2012-08-03 18:12:26 +02:00
}
file.Close()
// resize to width 1000 using Lanczos resampling
// and preserve aspect ratio
m := resize.Resize(1000, 0, img, resize.Lanczos3)
2012-08-03 18:12:26 +02:00
out, err := os.Create("test_resized.jpg")
if err != nil {
log.Fatal(err)
2012-08-03 18:12:26 +02:00
}
defer out.Close()
// write new image to file
jpeg.Encode(out, m, nil)
}
```
2012-08-03 17:41:21 +02:00
2012-09-15 20:41:05 +02:00
TODO
----
- Implement low-pass filtering before downscaling to prevent moiré patterns in the resulting image
- Minimize calls to image.Image.At(): It's pretty slow but inevitable as it keeps the code generic
2012-08-02 22:16:15 +02:00
License
2012-08-03 20:17:28 +02:00
-------
2012-08-02 22:16:15 +02:00
Copyright (c) 2012 Jan Schlicht <janschlicht@gmail.com>
2012-08-06 21:49:02 +02:00
Resize is released under an MIT style license.