goimg

package module
v0.0.0-...-65863b1 Latest Latest
Warning

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

Go to latest
Published: Apr 10, 2023 License: ISC Imports: 5 Imported by: 0

README

About

Pure golang image resizing.

This package is a fork of https://github.com/nfnt/resize , required Go >=1.12+.

Usage

Fetch package go get github.com/giant-store/goimg

Example: resize a JPEG image

import (
	"bytes"
	"fmt"
	"image"
	"image/jpeg"
	"io/ioutil"
	"log"
	"os"

	"github.com/giant-stone/goimg"
)

func main() {
	// fetch sample image form https://en.wikipedia.org/wiki/Lenna
	fn := "Lena.jpg"
	dat, err := ioutil.ReadFile(fn)
	exitOnErr(err)

	img, format, err := image.Decode(bytes.NewReader(dat))
	exitOnErr(err)

	widthOrigin, heightOrigin := img.Bounds().Max.X, img.Bounds().Max.Y
	width, height := uint(widthOrigin/2), uint(heightOrigin/2)
	imgResized := goimg.Resize(width, height, img, goimg.Lanczos3)

	output, err := os.Create("small.jpg")
	exitOnErr(err)
	defer output.Close()

	err = jpeg.Encode(output, imgResized, nil)
	exitOnErr(err)

	fmt.Printf("resize format=%s (%d,%d)=>(%d,%d) \n", format, widthOrigin, heightOrigin, width, height)
}

func exitOnErr(err error) {
	if err != nil {
		log.Panic(err)
	}
}

The goimg package provides 2 functions:

  • goimg.Resize creates a scaled image with new dimensions (width, height) using the interpolation function i. If either width or height is set to 0, it will be set to an aspect ratio preserving value.
  • goimg.Thumbnail down-scales an image preserving its aspect ratio to the maximum dimensions (maxWidth, maxHeight). It will return the original image if original sizes are smaller than the provided dimensions.
goimg.Resize(width, height uint, img image.Image, i goimg.InterpolationFunction) image.Image
goimg.Thumbnail(maxWidth, maxHeight uint, img image.Image, i goimg.InterpolationFunction) image.Image

The provided interpolation functions are (from fast to slow execution time)

Which of these methods gives the best results depends on your use case.

Documentation

Overview

package goimg implements various image resizing methods.

The package works with the Image interface described in the image package. Various interpolation methods are provided and multiple processors may be utilized in the computations.

Example:

imgResized := resize.Resize(1000, 0, imgOld, resize.MitchellNetravali)

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Resize

func Resize(width, height uint, img image.Image, interp InterpolationFunction) image.Image

Resize scales an image to new width and height using the interpolation function interp. A new image with the given dimensions will be returned. If one of the parameters width or height is set to 0, its size will be calculated so that the aspect ratio is that of the originating image. The resizing algorithm uses channels for parallel computation. If the input image has width or height of 0, it is returned unchanged.

func Thumbnail

func Thumbnail(maxWidth, maxHeight uint, img image.Image, interp InterpolationFunction) image.Image

Thumbnail will downscale provided image to max width and height preserving original aspect ratio and using the interpolation function interp. It will return original image, without processing it, if original sizes are already smaller than provided constraints.

Types

type InterpolationFunction

type InterpolationFunction int

An InterpolationFunction provides the parameters that describe an interpolation kernel. It returns the number of samples to take and the kernel function to use for sampling.

const (
	// Nearest-neighbor interpolation
	NearestNeighbor InterpolationFunction = iota
	// Bilinear interpolation
	Bilinear
	// Bicubic interpolation (with cubic hermite spline)
	Bicubic
	// Mitchell-Netravali interpolation
	MitchellNetravali
	// Lanczos interpolation (a=2)
	Lanczos2
	// Lanczos interpolation (a=3)
	Lanczos3
)

InterpolationFunction constants

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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