A lightning fast image processing and resizing library for Go

Overview

govips

GoDoc Go Report Card GitHub release (latest SemVer) License Build Status Coverage Status

A lightning fast image processing and resizing library for Go

This package wraps the core functionality of libvips image processing library by exposing all image operations on first-class types in Go.

Libvips is generally 4-8x faster than other graphics processors such as GraphicsMagick and ImageMagick. Check the benchmark: Speed and Memory Use

The intent for this is to enable developers to build extremely fast image processors in Go, which is suited well for concurrent requests.

Requirements

  • libvips 8.10+
  • C compatible compiler such as gcc 4.6+ or clang 3.0+
  • Go 1.14+

Dependencies

MacOS

Use homebrew to install vips and pkg-config:

brew install vips pkg-config

Ubuntu

You need at least libvips 8.10.2 to work with govips. Groovy (20.10) repositories have the latest version. However on Bionic (18.04) and Focal (20.04), you need to install libvips and dependencies from a backports repository:

sudo add-apt-repository ppa:tonimelisma/ppa

Then:

sudo apt -y install libvips-dev

Windows

The recommended approach on Windows is to use Govips via WSL and Ubuntu.

If you need to run Govips natively on Windows, it's not difficult but will require some effort. We don't have a recommended environment or setup at the moment. Windows is also not in our list of CI/CD targets so Govips is not regularly tested for compatibility. If you would be willing to setup and maintain a robust CI/CD Windows environment, please open a PR, we would be pleased to accept your contribution and support Windows as a platform.

Installation

go get -u github.com/davidbyttow/govips/v2/vips

MacOS note

On MacOS, govips may not compile without first setting an environment variable:

export CGO_CFLAGS_ALLOW="-Xpreprocessor"

Example usage

package main

import (
	"fmt"
	"io/ioutil"
	"os"

	"github.com/davidbyttow/govips/v2/vips"
)

func checkError(err error) {
	if err != nil {
		fmt.Println("error:", err)
		os.Exit(1)
	}
}

func main() {
	vips.Startup(nil)
	defer vips.Shutdown()

	image1, err := vips.NewImageFromFile("input.jpg")
	checkError(err)

	// Rotate the picture upright and reset EXIF orientation tag
	err = image1.AutoRotate()
	checkError(err)

	ep := vips.NewDefaultJPEGExportParams()
	image1bytes, _, err := image1.Export(ep)
	err = ioutil.WriteFile("output.jpg", image1bytes, 0644)
	checkError(err)

}

See examples/ folder for more examples.

Running tests

$ make test

Contributing

Feel free to file issues or create pull requests. See this guide on contributing for more information.

Credits

Thanks to:

License

MIT - David Byttow

Comments
  • Add Transform ICC Profile API

    Add Transform ICC Profile API

    I previously asked about adding support for transforming images between ICC profiles and it was suggested that suggested I make a pull request. I was able to get the vips_icc_transform function working with an ICC profile that I supplied externally. If you have a Mac, the built-in color profiles are located at /System/Library/ColorSync/Profiles/.

    I was able to take an image with an embedded Display P3 color profile and transform it to both an sRGB version and a Display P3 version without breaking it.

    Please let me know what you think and if you have any feedback!

    opened by AttilaTheFun 21
  • Improved exif extraction

    Improved exif extraction

    This PR adds several APIs that exist already at the libvips layer but were not exposed by govips which allow us to read and write EXIF fields. For images like JPEGs which support regular EXIF data, the exif-data image field can be read out as a blob or the individual fields can be parsed via their respective field names. For images like TIFFs without direct EXIF support, you can also extract the newer XMP metadata as a blob.

    Also while I was testing with TIFF images I found a bug where TIFF images always defaulted to a resolution 1.0 Pixels-Per-Millimeters (about 25PPI). The resolution doesn't really affect the image itself -- just how large it should be printed. The canonical way to change this with libvips is to copy the image changing the xres / yres fields to the desired value. I removed the strange TIFF behavior so that the original resolution (different than pixel dimensions) will be preserved and it can be set to the desired value with the new API.

    opened by AttilaTheFun 15
  • Getting object alive count greater than 0 when calling vips to generate a black image

    Getting object alive count greater than 0 when calling vips to generate a black image

    We are using this benchmarking code through govips for basic operation of creating black images (https://pkg.go.dev/github.com/davidbyttow/govips/v2/vips#Black).

    func BenchmarkVipsBlack(b *testing.B) {
    	for n := 0; n < b.N; n++ {
    		_, _ = vips.Black(100, 100)
    	}
    	vips.PrintCache()
    	vips.PrintObjectReport("BenchmarkVipsBlack")
    	vipsMemStats := &vips.MemoryStats{}
    	vipsRuntimeStats := &vips.RuntimeStats{}
    	vips.ReadVipsMemStats(vipsMemStats)
    	vips.ReadRuntimeStats(vipsRuntimeStats)
    	golog.Logger.Info(fmt.Sprintf("VIPS Runtime Stats: %+v", vipsRuntimeStats))
    	golog.Logger.Info(fmt.Sprintf("VIPS Memory Stats: %+v", vipsMemStats))
    }
    

    The response for this as mentioned below -

    vips live objects: BenchmarkVipsBlack...
    2 objects alive:
    0) VipsBlack (0x12d840e10), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900b000) width=100 height=100 -
    1) VipsImage (0x13900b000), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    2022/11/23 18:44:22 [govips.info] 
    2022-11-23T18:44:22.566+0530    INFO    VIPS Runtime Stats: &{OperationCounts:map[]}
    2022-11-23T18:44:22.566+0530    INFO    VIPS Memory Stats: &{Mem:0 MemHigh:0 Files:0 Allocs:0}
    goos: darwin
    goarch: amd64
    pkg: irs/imagerendering
    cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
    BenchmarkVipsBlack-12           Operation cache:
    2022/11/23 18:44:22 [govips.info] 
    =======================================
    vips live objects: BenchmarkVipsBlack...
    22 objects alive:
    0) VipsBlack (0x139009540), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900b7d0) width=100 height=100 -
    1) VipsBlack (0x10500e100), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900e340) width=100 height=100 -
    2) VipsBlack (0x10500e000), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900e020) width=100 height=100 -
    3) VipsBlack (0x1390096c0), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900bc80) width=100 height=100 -
    4) VipsImage (0x13900be10), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    5) VipsImage (0x13900e4d0), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    6) VipsBlack (0x1390095c0), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900b960) width=100 height=100 -
    7) VipsBlack (0x12d840e10), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900b000) width=100 height=100 -
    8) VipsImage (0x13900baf0), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    9) VipsImage (0x13900bc80), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    10) VipsImage (0x13900e020), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    11) VipsBlack (0x1390094c0), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900b640) width=100 height=100 -
    12) VipsImage (0x13900b7d0), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    13) VipsImage (0x13900b960), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    14) VipsImage (0x13900b640), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    15) VipsBlack (0x139009740), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900be10) width=100 height=100 -
    16) VipsBlack (0x10500e080), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900e1b0) width=100 height=100 -
    17) VipsImage (0x13900e1b0), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    18) VipsBlack (0x139009640), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900baf0) width=100 height=100 -
    19) VipsImage (0x13900e340), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    20) VipsImage (0x13900b000), count=1
    VipsImage (image), image class, 100x100 uchar, 1 band, multiband
    21) VipsBlack (0x10500e180), count=1
    VipsBlack (black), make a black image, black out=((VipsImage*) 0x13900e4d0) width=100 height=100 -
    2022/11/23 18:44:22 [govips.info] =======================================
    
    2022-11-23T18:44:22.568+0530    INFO    VIPS Runtime Stats: &{OperationCounts:map[]}
    2022-11-23T18:44:22.568+0530    INFO    VIPS Memory Stats: &{Mem:0 MemHigh:0 Files:0 Allocs:0}
          10        111271 ns/op         891 B/op      5 allocs/op
    PASS
    2022-11-23T18:44:22.571+0530    INFO    vips has been shutdown
    ok      irs/imagerendering      0.933s
    

    As mentioned in the response above, 22 objects are alive. @davidbyttow is this response expected or is this an indication of some memory leak.

    The above code ran for 10 iterations as mentioned in the results above.

    opened by abhilather 12
  • Add support for Magick loader and most loading parameters.

    Add support for Magick loader and most loading parameters.

    I was trying to process some animated GIFs - which are supported by libvips - but realized that doing so requires some changes in this library: 1) passing parameters to loaders, 2) extracting some additional metadata from images (e.g. the number of pages), and 3) supporting the magick writer.

    I started taking a stab at (1), the only parameter that's missing is the "background" for PDF (I may add it - didn't want to figure out how it works just yet). While I was at it I also added the ability to use magick as loader.

    I'll add tests of course, but I wanted to see if this PR may be accepted and agree on design first.

    opened by ibrt 12
  • Resized image file size 20% to 40% larger than

    Resized image file size 20% to 40% larger than "sharp" of Node.js

    govips produces 20% - 40% larger image file sizes than sharp (node equivalent) does for the same image dimensions and the same Lanczos3 kernel.

    Please check if govips is producing the optimal file size since both are using the same libvips backend.

    Thanks.

    opened by sann1918 12
  • Adds support for loading parameters

    Adds support for loading parameters

    Inspired by: https://github.com/davidbyttow/govips/pull/155

    However, this doesn't use libvips options yet. My intent is to likely switch to using VImage options (rather than C vararg functions) for import and export parameters, but I wanted to get this exposed and working first.

    opened by davidbyttow 11
  • ImportParams proof of concept

    ImportParams proof of concept

    Related to https://github.com/davidbyttow/govips/issues/147

    I created ImportParams struct with fields:

    • Fail
    • AutoRotate
    • Shrink

    All of them is optional and by default don't set on ...load_buffer call. By the same way can be added any other optional field.

    opened by bozaro 11
  • Memory Leak

    Memory Leak

    I am having a memory leak with govips. Any suggestions how to solve this?

    after several images

    Allocated Memory = 104 MiB	Total Allocated Memory = 144 MiB	System Memory = 134 MiB	Number of GC = 7
    VIPS Allocated Memory = 114 MiB	VIPS Total Allocated Memory = 121 MiB	VIPS Memory Allocations = 2 
    
    Allocated Memory = 104 MiB	Total Allocated Memory = 288 MiB	System Memory = 134 MiB	Number of GC = 15
    VIPS Allocated Memory = 171 MiB	VIPS Total Allocated Memory = 178 MiB	VIPS Memory Allocations = 3 
    

    Originally posted by @evanoberholster in https://github.com/davidbyttow/govips/issues/44#issuecomment-435683155

    bug help wanted 
    opened by evanoberholster 9
  • Add mozjpeg equivalent parameters to save

    Add mozjpeg equivalent parameters to save

    jcupitt explains the mozjpeg parameters in this comment: https://github.com/libvips/libvips/issues/1422#issuecomment-530032329

    Additionally, look for references to mozjpeg in the documentation for vips_jpegsave(): https://libvips.github.io/libvips/API/current/VipsForeignSave.html#VipsForeignJpegSubsample

    These changes improved jpeg compression for my test image, especially with the addition of overshoot_deringing when compressing a screenshot that includes text.

    opened by sandro 8
  • NewImageFromBuffer Not Understand Image Format

    NewImageFromBuffer Not Understand Image Format

    Hi there,

    import "bytes"
    import "image"
    import "image/color"
    import "image/png"
    import "image/draw"
    
    im := image.NewRGBA(image.Rect(0, 0, 100, 100))
    draw.Draw(im, im.Bounds(), image.NewUniform(color.NRGBA{255, 0, 0, 255}), image.ZP, draw.Src)
    var buff bytes.Buffer
    err := png.Encode(&buff, im)
    
    vipsImage, err := vips.NewImageFromBuffer(buff.Bytes())
    

    [govips.info] failed to understand image format size=26149

    Any suggestions how to solve this?

    opened by phlqp 8
  • Add support for higher bit depth AVIF and HEIF images

    Add support for higher bit depth AVIF and HEIF images

    Back in February, John helped me add support for loading and saving 8/10/12 bit HEIC and AVIF files to libvips here: https://github.com/libvips/libvips/pull/2596

    Now with the release of iOS 16 / MacOS Ventura which support AVIF images natively, I want to add support for them to my app.

    I asked about this a while ago here: https://github.com/davidbyttow/govips/issues/313 and finally had some time to implement it myself.

    The changes in this PR are as follows:

    • I cleaned up the HEIF / AVIF export parameters so they both now take a Bitdepth parameter like PNGs. Also libvips has renamed "speed" to "effort" so I migrated us to use that parameter name with backwards support for the speed parameter for code that used it.
    • I added golden image tests for 8bit AVIF and encoding a 16bit TIF to a 12bit AVIF.
    • The files I touched got auto formatted by gofmt so we should probably just commit those changes to avoid annoying future PR authors.
    opened by AttilaTheFun 7
  • Add TempDir config option

    Add TempDir config option

    This config option allows the caller to specify a preexisting temporary directory instead of relying on the ability to create one at runtime. This can be important in setups where a shell or mkdir are unavailable at runtime.

    opened by tgrosinger 2
  • Cannot create image from raw RGB buffer

    Cannot create image from raw RGB buffer

    We have a use-case where we would like to create a new image based off raw RGB data. Vips does have support for this via the new_from_memory function (or better yet new_from_memory_copy), e.g.:

    vips::VImage out = vips::VImage::new_from_memory (data, length, width, height, 3, VIPS_FORMAT_UCHAR);

    opened by nhuysamen-godaddy 1
  • TransformICCProfile() - expose input ICC profile parameter?

    TransformICCProfile() - expose input ICC profile parameter?

    Hello all, Do you think exposing the fallback input ICC profile would make sense?

    Currently, the TransformICCProfile() function takes only one parameter - the output profile. The input profile is a hardcoded sRGB one.

    image

    While this is a clean solution and would cover 98% of all use cases, it does not permit to deal with some "broken" images like CMYK images without ICC profiles. And there is no control over color transformations on any images without embedded profiles.

    I would expect that such an addition would also provide a solution to this issue (https://github.com/davidbyttow/govips/issues/275).

    Alternatively, someting can be done for OptimizeICCProfile()? Again, nothing can do any good for CMYK images without ICC profiles.

    image

    I would appreciate your input.

    opened by michaylov 1
  • How to create a transparent canvas?

    How to create a transparent canvas?

    Im trying to create a empty transparent canvas that i can add images on.

    right now i am resorting to

    	c := image.NewNRGBA(rectangle)
    	buf := &bytes.Buffer{}
    	if err := png.Encode(buf, c); err != nil {
    		panic(err)
    	}
    	canvas, err := vips.NewImageFromBuffer(buf.Bytes())
    	if err != nil {
    		panic(err)
    	}
    

    which feels toaly backwards.

    I have tried using vips.Black() but it only gives me a black image and when i try to draw using img.Insert(), the whole image is still just black

    if i do canvas := &vips.ImageRef{} i cannot propagate all fields needed for it to work

    Any smart things i've missed in the lib?

    Cheers and thanks!

    opened by roffe 3
  • Histogram calculations?

    Histogram calculations?

    I'm trying to find fast ways to get the histogram as text/json of rather large 16bit tiff files. I was hoping that govips can help.

    Does the library have bindings for histogram calculations? I managed only to find the VIPS_INTERPRETATION_HISTOGRAM but not the functions shown at https://www.libvips.org/API/current/libvips-histogram.html

    Is histogram calculation supported?

    opened by oschrenk 1
  • Some bitmaps fail in GoVips but work with Vips

    Some bitmaps fail in GoVips but work with Vips

    I am bringing our image scaling application up to date using govips v2. Thanks for the huge effort to bring the library up to date, it's great!

    I have one small issue right now around Bitmap support. I believe that there's something in the bindings which has changed around Bitmap handling. Bitmaps generated in the OS/2 format do not load when they are loaded by govips, instead returning the error bmp: unsupported BMP image.

    $ file ../testdata/koala.bmp*
    ../testdata/koala.bmp:  PC bitmap, Windows 98/2000 and newer format, 1024 x 768 x 24, cbSize 2359434, bits offset 138
    ../testdata/koala.bmp2: PC bitmap, OS/2 1.x format, 1024 x 768 x 24, cbSize 2359322, bits offset 26
    ../testdata/koala.bmp3: PC bitmap, Windows 3.x format, 1024 x 768 x 24, image size 2359296, resolution 2834 x 2834 px/m, cbSize 2359350, bits offset 54
    

    These files are definitely loadable by the Vips CLI program for the installation that matches the one used by govips:

    $ vips rot ../testdata/koala.bmp2 out.jpg d90
    $ file out.jpg
    out.jpg: JPEG image data, <snip> 768x1024 <snip>
    

    I know this is an edge case, but I suspect it's because BMP handling is being done using the standard library? I haven't dug into it yet.

    Here are the files in question. This picture was originally obtained through wikipedia I believe, and reencoded to these bitmap formats using ImageMagick Archive.zip

    opened by jhford-scout24 2
Releases(v2.11.0)
  • v2.11.0(Mar 17, 2022)

    Bug fixes and improvements

    • Fixes various animated GIF issues (thanks @Elad-Laufer and @cshum)
    • Fixes DPI param for svg and PDF (thanks @JMontupet)

    What's Changed

    • Pages() - Always return 1 for JP2K by @Elad-Laufer in https://github.com/davidbyttow/govips/pull/252
    • RemoveMetadata() - Retain page metadata by @Elad-Laufer in https://github.com/davidbyttow/govips/pull/253
    • Animated GIF support for load thumbnail by @cshum in https://github.com/davidbyttow/govips/pull/258
    • Animated GIF support for ExtractArea by @cshum in https://github.com/davidbyttow/govips/pull/259
    • Bump simple-get from 4.0.0 to 4.0.1 in /examples/tiff by @dependabot in https://github.com/davidbyttow/govips/pull/261
    • Animated GIF support for Embed, EmbedBackground by @cshum in https://github.com/davidbyttow/govips/pull/260
    • Set and Get PageDelay for animated GIF by @cshum in https://github.com/davidbyttow/govips/pull/262
    • fix typo by @4ricci in https://github.com/davidbyttow/govips/pull/267
    • Update example_mozjepg_image.go to close image by @WeibingChen17 in https://github.com/davidbyttow/govips/pull/271
    • Default to using gifsave for libvips >= 8.12.0 by @vansante in https://github.com/davidbyttow/govips/pull/269
    • fix dpi/density param for svg and pdf (#203) by @JMontupet in https://github.com/davidbyttow/govips/pull/268

    New Contributors

    • @dependabot made their first contribution in https://github.com/davidbyttow/govips/pull/261
    • @4ricci made their first contribution in https://github.com/davidbyttow/govips/pull/267
    • @WeibingChen17 made their first contribution in https://github.com/davidbyttow/govips/pull/271
    • @JMontupet made their first contribution in https://github.com/davidbyttow/govips/pull/268

    Full Changelog: https://github.com/davidbyttow/govips/compare/v2.10.0...v2.11.0

    Source code(tar.gz)
    Source code(zip)
  • v2.10.0(Jan 17, 2022)

    New functionality

    • Animated GIF support (thanks @Elad-Laufer)
    • Simple pixelation filter (thanks @Elad-Laufer)
    • Adds image Replicate for repeating images (thanks @cshum)

    Bug fixes and improvements

    • Fixes macos-11 test failures

    What's Changed

    • Remove deprecated export functions by @Elad-Laufer in https://github.com/davidbyttow/govips/pull/242
    • Fix typos and shadowing by @Elad-Laufer in https://github.com/davidbyttow/govips/pull/241
    • implement vips_replicate by @cshum in https://github.com/davidbyttow/govips/pull/243
    • Revert "- remove deprecated export functions (#242)" by @davidbyttow in https://github.com/davidbyttow/govips/pull/244
    • Minor fixes based on PR #242, adds macos-12 golden snapshots by @davidbyttow in https://github.com/davidbyttow/govips/pull/245
    • Add simple (and naive) implementation of pixelate filter by @Elad-Laufer in https://github.com/davidbyttow/govips/pull/224
    • Animated GIF support by @Elad-Laufer in https://github.com/davidbyttow/govips/pull/246

    Full Changelog: https://github.com/davidbyttow/govips/compare/v2.9.0...v2.10.0

    Source code(tar.gz)
    Source code(zip)
  • v2.9.0(Dec 31, 2021)

    New functionality

    • GetPoint()
    • Create thumbnails straight from image or buffer (faster than loading image, then thumbnailing)
    • vips_embed implements extend background with color
    • TransformICC()

    Bug fixes

    • Fix double-free in Label()
    Source code(tar.gz)
    Source code(zip)
  • v2.8.1(Dec 12, 2021)

  • v2.8.0(Dec 12, 2021)

    New functionality

    • loading parameters general support
    • JPEG2000 support
    • PNG export parameters support
    • getPoint()
    • Join()
    • ArrayJoin()

    Bug corrections

    • PNG loading fail parameter respected
    • WEBP ICC support
    • Some memory leak fixes
    Source code(tar.gz)
    Source code(zip)
  • v2.7.0(May 28, 2021)

  • v2.6.0(May 8, 2021)

    • FindTrim()
    • Insert()
    • Rank()
    • Improved BMP performance
    • Close() available again for manually closing images if GC can't keep up with your hyper-volume app
    • WEBP and GIF animation support

    A huge thank you to all the wonderful contributors!

    Source code(tar.gz)
    Source code(zip)
  • v2.5.0(Feb 19, 2021)

  • v2.4.0(Jan 6, 2021)

    New functionality:

    • Support vips_similarity (rotate and scale picture precisely, any angle)
    • Add support for converting govips images to golang image.Image objects
    • Smart cropping functionality (crop to the interesting parts of pictures)
    • Draw rectangles (draw_rect()) or start with an empty black image (black())
    • New format-specific export parameters which allow you to tune format-specific options

    Bug fixes:

    • Check if libvips compiled with ICC profile support before attempting to use it
    • Compress TIFF lossless by default
    Source code(tar.gz)
    Source code(zip)
  • v2.3.1(Dec 22, 2020)

  • v2.3.0(Dec 22, 2020)

  • v2.2.0(Dec 13, 2020)

  • v2.1.0(Nov 16, 2020)

    Version 2.1.0 comes with a couple of new features:

    • Logging - as verbose as you want it, to wherever you want it (not just stderr!)
    • Logging now consolidates all of glib, libvips and govips into one channel
    • imageRef.Close() is deprecated, it happens automatically nowadays

    In addition, we've got:

    • More, better examples and documentation
    • Better unit test coverage
    Source code(tar.gz)
    Source code(zip)
  • v2.0.2(Nov 2, 2020)

  • v2.0.1(Oct 28, 2020)

  • v2.0.0(Oct 27, 2020)

    Moving to version 2.0.0 due to breaking API changes. A lot of cleanup, new functionality merged from a fork, bug fixes, documentation etc.

    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Oct 2, 2017)

Owner
David Byttow
Tech Villain. Currently at Bridgewater. Formerly worked at Snapchat, Postmates, Google, Square, Secret, Amazon Game Studio, etc
David Byttow
Pure golang image resizing

This package is no longer being updated! Please look for alternatives if that bothers you. Resize Image resizing for the Go programming language with

Jan Schlicht 2.9k Dec 5, 2022
An image resizing server written in Go

picfit picfit is a reusable Go server to manipulate images (resize, thumbnail, etc.). It will act as a proxy on your storage engine and will be served

Florent Messa 1.7k Nov 26, 2022
Image resizing for the Go programming language with common interpolation methods

This package is no longer being updated! Please look for alternatives if that bothers you. Resize Image resizing for the Go programming language with

null 1 Dec 14, 2021
Fast and secure standalone server for resizing and converting remote images

imgproxy imgproxy is a fast and secure standalone server for resizing and converting remote images. The main principles of imgproxy are simplicity, sp

imgproxy 6.7k Nov 29, 2022
darkroom - An image proxy with changeable storage backends and image processing engines with focus on speed and resiliency.

Darkroom - Yet Another Image Proxy Introduction Darkroom combines the storage backend and the image processor and acts as an Image Proxy on your image

Gojek 203 Dec 6, 2022
Go package for fast high-level image processing powered by libvips C library

bimg Small Go package for fast high-level image processing using libvips via C bindings, providing a simple programmatic API. bimg was designed to be

Tom 2.1k Dec 3, 2022
Image - This repository holds supplementary Go image librariesThis repository holds supplementary Go image libraries

Go Images This repository holds supplementary Go image libraries. Download/Insta

null 0 Jan 5, 2022
Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing

imaginary Fast HTTP microservice written in Go for high-level image processing backed by bimg and libvips. imaginary can be used as private or public

Tom 4.7k Dec 1, 2022
Cloud function + website for resizing, cropping and bordering images for pragalicious.com

Cloud function + website for resizing, cropping and bordering images for pragalicious.com

Ard Scheirlynck 0 Jan 23, 2022
Image processing library and rendering toolkit for Go.

blend Image processing library and rendering toolkit for Go. (WIP) Installation: This library is compatible with Go1. go get github.com/phrozen/blend

Guillermo Estrada 61 Nov 11, 2022
A library for basic image processing in Go.

Imaging Package imaging provides basic image processing functions (resize, rotate, crop, brightness/contrast adjustments, etc.). All the image process

null 0 Nov 26, 2021
A library for basic image processing in Go.

Imaging Package imaging provides basic image processing functions (resize, rotate, crop, brightness/contrast adjustments, etc.). All the image process

null 0 Nov 26, 2021
Storage and image processing server written in Go

Mort An S3-compatible image processing server written in Go. Still in active development. Features HTTP server Resize, Rotate, SmartCrop Convert (JPEG

Marcin Kaciuba 472 Nov 30, 2022
Image processing algorithms in pure Go

bild A collection of parallel image processing algorithms in pure Go. The aim of this project is simplicity in use and development over absolute high

Anthony N. Simon 3.7k Dec 3, 2022
Imaging is a simple image processing package for Go

Imaging Package imaging provides basic image processing functions (resize, rotate, crop, brightness/contrast adjustments, etc.). All the image process

Grigory Dryapak 4.5k Dec 6, 2022
An API which allows you to upload an image and responds with the same image, stripped of EXIF data

strip-metadata This is an API which allows you to upload an image and responds with the same image, stripped of EXIF data. How to run You need to have

Cristina Simionescu 0 Nov 25, 2021
Easily customizable Social image (or Open graph image) generator

fancycard Easily customizable Social image (or Open graph image) generator Built with Go, Gin, GoQuery and Chromedp Build & Run Simply, Clone this rep

Youngbin Han 4 Jan 14, 2022
Imgpreview - Tiny image previews for HTML while the original image is loading

imgpreview This is a Go program that generates tiny blurry previews for images t

Dmitry Chestnykh 8 May 22, 2022
A fast, correct image dithering library in Go.

dither is a library for dithering images in Go. It has many dithering algorithms built-in, and allows you to specify your own. Correctness is a

makeworld 263 Dec 1, 2022