gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

README.md (9147B)


      1 # Imaging
      2 
      3 [![GoDoc](https://godoc.org/github.com/disintegration/imaging?status.svg)](https://godoc.org/github.com/disintegration/imaging)
      4 [![Build Status](https://travis-ci.org/disintegration/imaging.svg?branch=master)](https://travis-ci.org/disintegration/imaging)
      5 [![Coverage Status](https://coveralls.io/repos/github/disintegration/imaging/badge.svg?branch=master&service=github)](https://coveralls.io/github/disintegration/imaging?branch=master)
      6 [![Go Report Card](https://goreportcard.com/badge/github.com/disintegration/imaging)](https://goreportcard.com/report/github.com/disintegration/imaging)
      7 
      8 Package imaging provides basic image processing functions (resize, rotate, crop, brightness/contrast adjustments, etc.).
      9 
     10 All the image processing functions provided by the package accept any image type that implements `image.Image` interface
     11 as an input, and return a new image of `*image.NRGBA` type (32bit RGBA colors, non-premultiplied alpha).
     12 
     13 ## Installation
     14 
     15     go get -u github.com/disintegration/imaging
     16 
     17 ## Documentation
     18 
     19 http://godoc.org/github.com/disintegration/imaging
     20 
     21 ## Usage examples
     22 
     23 A few usage examples can be found below. See the documentation for the full list of supported functions.
     24 
     25 ### Image resizing
     26 
     27 ```go
     28 // Resize srcImage to size = 128x128px using the Lanczos filter.
     29 dstImage128 := imaging.Resize(srcImage, 128, 128, imaging.Lanczos)
     30 
     31 // Resize srcImage to width = 800px preserving the aspect ratio.
     32 dstImage800 := imaging.Resize(srcImage, 800, 0, imaging.Lanczos)
     33 
     34 // Scale down srcImage to fit the 800x600px bounding box.
     35 dstImageFit := imaging.Fit(srcImage, 800, 600, imaging.Lanczos)
     36 
     37 // Resize and crop the srcImage to fill the 100x100px area.
     38 dstImageFill := imaging.Fill(srcImage, 100, 100, imaging.Center, imaging.Lanczos)
     39 ```
     40 
     41 Imaging supports image resizing using various resampling filters. The most notable ones:
     42 - `Lanczos` - A high-quality resampling filter for photographic images yielding sharp results.
     43 - `CatmullRom` - A sharp cubic filter that is faster than Lanczos filter while providing similar results.
     44 - `MitchellNetravali` - A cubic filter that produces smoother results with less ringing artifacts than CatmullRom.
     45 - `Linear` - Bilinear resampling filter, produces smooth output. Faster than cubic filters.
     46 - `Box` - Simple and fast averaging filter appropriate for downscaling. When upscaling it's similar to NearestNeighbor.
     47 - `NearestNeighbor` - Fastest resampling filter, no antialiasing.
     48 
     49 The full list of supported filters:  NearestNeighbor, Box, Linear, Hermite, MitchellNetravali, CatmullRom, BSpline, Gaussian, Lanczos, Hann, Hamming, Blackman, Bartlett, Welch, Cosine. Custom filters can be created using ResampleFilter struct.
     50 
     51 **Resampling filters comparison**
     52 
     53 Original image:
     54 
     55 ![srcImage](testdata/branches.png)
     56 
     57 The same image resized from 600x400px to 150x100px using different resampling filters.
     58 From faster (lower quality) to slower (higher quality):
     59 
     60 Filter                    | Resize result
     61 --------------------------|---------------------------------------------
     62 `imaging.NearestNeighbor` | ![dstImage](testdata/out_resize_nearest.png)
     63 `imaging.Linear`          | ![dstImage](testdata/out_resize_linear.png)
     64 `imaging.CatmullRom`      | ![dstImage](testdata/out_resize_catrom.png)
     65 `imaging.Lanczos`         | ![dstImage](testdata/out_resize_lanczos.png)
     66 
     67 
     68 ### Gaussian Blur
     69 
     70 ```go
     71 dstImage := imaging.Blur(srcImage, 0.5)
     72 ```
     73 
     74 Sigma parameter allows to control the strength of the blurring effect.
     75 
     76 Original image                     | Sigma = 0.5                            | Sigma = 1.5
     77 -----------------------------------|----------------------------------------|---------------------------------------
     78 ![srcImage](testdata/flowers_small.png) | ![dstImage](testdata/out_blur_0.5.png) | ![dstImage](testdata/out_blur_1.5.png)
     79 
     80 ### Sharpening
     81 
     82 ```go
     83 dstImage := imaging.Sharpen(srcImage, 0.5)
     84 ```
     85 
     86 `Sharpen` uses gaussian function internally. Sigma parameter allows to control the strength of the sharpening effect.
     87 
     88 Original image                     | Sigma = 0.5                               | Sigma = 1.5
     89 -----------------------------------|-------------------------------------------|------------------------------------------
     90 ![srcImage](testdata/flowers_small.png) | ![dstImage](testdata/out_sharpen_0.5.png) | ![dstImage](testdata/out_sharpen_1.5.png)
     91 
     92 ### Gamma correction
     93 
     94 ```go
     95 dstImage := imaging.AdjustGamma(srcImage, 0.75)
     96 ```
     97 
     98 Original image                     | Gamma = 0.75                             | Gamma = 1.25
     99 -----------------------------------|------------------------------------------|-----------------------------------------
    100 ![srcImage](testdata/flowers_small.png) | ![dstImage](testdata/out_gamma_0.75.png) | ![dstImage](testdata/out_gamma_1.25.png)
    101 
    102 ### Contrast adjustment
    103 
    104 ```go
    105 dstImage := imaging.AdjustContrast(srcImage, 20)
    106 ```
    107 
    108 Original image                     | Contrast = 15                              | Contrast = -15
    109 -----------------------------------|--------------------------------------------|-------------------------------------------
    110 ![srcImage](testdata/flowers_small.png) | ![dstImage](testdata/out_contrast_p15.png) | ![dstImage](testdata/out_contrast_m15.png)
    111 
    112 ### Brightness adjustment
    113 
    114 ```go
    115 dstImage := imaging.AdjustBrightness(srcImage, 20)
    116 ```
    117 
    118 Original image                     | Brightness = 10                              | Brightness = -10
    119 -----------------------------------|----------------------------------------------|---------------------------------------------
    120 ![srcImage](testdata/flowers_small.png) | ![dstImage](testdata/out_brightness_p10.png) | ![dstImage](testdata/out_brightness_m10.png)
    121 
    122 ### Saturation adjustment
    123 
    124 ```go
    125 dstImage := imaging.AdjustSaturation(srcImage, 20)
    126 ```
    127 
    128 Original image                     | Saturation = 30                              | Saturation = -30
    129 -----------------------------------|----------------------------------------------|---------------------------------------------
    130 ![srcImage](testdata/flowers_small.png) | ![dstImage](testdata/out_saturation_p30.png) | ![dstImage](testdata/out_saturation_m30.png)
    131 
    132 ## FAQ
    133 
    134 ### Incorrect image orientation after processing (e.g. an image appears rotated after resizing)
    135 
    136 Most probably, the given image contains the EXIF orientation tag.
    137 The stadard `image/*` packages do not support loading and saving
    138 this kind of information. To fix the issue, try opening images with
    139 the `AutoOrientation` decode option. If this option is set to `true`,
    140 the image orientation is changed after decoding, according to the
    141 orientation tag (if present). Here's the example:
    142 
    143 ```go
    144 img, err := imaging.Open("test.jpg", imaging.AutoOrientation(true))
    145 ```
    146 
    147 ### What's the difference between `imaging` and `gift` packages?
    148 
    149 [imaging](https://github.com/disintegration/imaging)
    150 is designed to be a lightweight and simple image manipulation package.
    151 It provides basic image processing functions and a few helper functions
    152 such as `Open` and `Save`. It consistently returns *image.NRGBA image 
    153 type (8 bits per channel, RGBA).
    154 
    155 [gift](https://github.com/disintegration/gift)
    156 supports more advanced image processing, for example, sRGB/Linear color
    157 space conversions. It also supports different output image types
    158 (e.g. 16 bits per channel) and provides easy-to-use API for chaining
    159 multiple processing steps together.
    160 
    161 ## Example code
    162 
    163 ```go
    164 package main
    165 
    166 import (
    167 	"image"
    168 	"image/color"
    169 	"log"
    170 
    171 	"github.com/disintegration/imaging"
    172 )
    173 
    174 func main() {
    175 	// Open a test image.
    176 	src, err := imaging.Open("testdata/flowers.png")
    177 	if err != nil {
    178 		log.Fatalf("failed to open image: %v", err)
    179 	}
    180 
    181 	// Crop the original image to 300x300px size using the center anchor.
    182 	src = imaging.CropAnchor(src, 300, 300, imaging.Center)
    183 
    184 	// Resize the cropped image to width = 200px preserving the aspect ratio.
    185 	src = imaging.Resize(src, 200, 0, imaging.Lanczos)
    186 
    187 	// Create a blurred version of the image.
    188 	img1 := imaging.Blur(src, 5)
    189 
    190 	// Create a grayscale version of the image with higher contrast and sharpness.
    191 	img2 := imaging.Grayscale(src)
    192 	img2 = imaging.AdjustContrast(img2, 20)
    193 	img2 = imaging.Sharpen(img2, 2)
    194 
    195 	// Create an inverted version of the image.
    196 	img3 := imaging.Invert(src)
    197 
    198 	// Create an embossed version of the image using a convolution filter.
    199 	img4 := imaging.Convolve3x3(
    200 		src,
    201 		[9]float64{
    202 			-1, -1, 0,
    203 			-1, 1, 1,
    204 			0, 1, 1,
    205 		},
    206 		nil,
    207 	)
    208 
    209 	// Create a new image and paste the four produced images into it.
    210 	dst := imaging.New(400, 400, color.NRGBA{0, 0, 0, 0})
    211 	dst = imaging.Paste(dst, img1, image.Pt(0, 0))
    212 	dst = imaging.Paste(dst, img2, image.Pt(0, 200))
    213 	dst = imaging.Paste(dst, img3, image.Pt(200, 0))
    214 	dst = imaging.Paste(dst, img4, image.Pt(200, 200))
    215 
    216 	// Save the resulting image as JPEG.
    217 	err = imaging.Save(dst, "testdata/out_example.jpg")
    218 	if err != nil {
    219 		log.Fatalf("failed to save image: %v", err)
    220 	}
    221 }
    222 ```
    223 
    224 Output:
    225 
    226 ![dstImage](testdata/out_example.jpg)