Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/logica0419/resigif
Animated GIF resizing library w/o cgo or any third-party Libraries
https://github.com/logica0419/resigif
gif go image-processing resize
Last synced: 3 days ago
JSON representation
Animated GIF resizing library w/o cgo or any third-party Libraries
- Host: GitHub
- URL: https://github.com/logica0419/resigif
- Owner: logica0419
- License: mit
- Created: 2024-01-20T16:55:45.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-04T17:19:59.000Z (2 months ago)
- Last Synced: 2025-01-31T11:55:45.016Z (6 days ago)
- Topics: gif, go, image-processing, resize
- Language: Go
- Homepage:
- Size: 791 KB
- Stars: 9
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# resigif
[![CI Pipeline](https://github.com/logica0419/resigif/actions/workflows/ci.yml/badge.svg)](https://github.com/logica0419/resigif/actions/workflows/ci.yml) [![Go Reference](https://pkg.go.dev/badge/github.com/logica0419/resigif.svg)](https://pkg.go.dev/github.com/logica0419/resigif) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/logica0419/resigif/blob/main/LICENSE)
Animated GIF resizing library w/o cgo nor any third-party Libraries
## Installation
You can install resigif with the `go get` command
```sh
go get -u github.com/logica0419/resigif
```## Quick Start
The only API of this library is `Resize()` function.
You can easily resize an animated GIF image by passing `*gif.GIF` struct and the target size.Here's a simple example:
```go
package mainimport (
"context"
"image/gif"
"os""github.com/logica0419/resigif"
)func main() {
ctx := context.Background()src, err := os.Open("image.gif")
if err != nil {
panic(err)
}
defer src.Close()srcImg, err := gif.DecodeAll(src)
if err != nil {
panic(err)
}width := 480
height := 360dstImg, err := resigif.Resize(ctx, srcImg, width, height)
if err != nil {
panic(err)
}dst, err := os.OpenFile("resized.gif", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0o644)
if err != nil {
panic(err)
}
defer dst.Close()err = gif.EncodeAll(dst, dstImg)
if err != nil {
panic(err)
}
}```
## Customization
- Aspect Ratio Preservation
- You can choose from `Ignore` or `Maintain````go
dstImg, err := resigif.Resize(
ctx,
srcImg,
width,
height,
resigif.WithAspectRatio(resigif.Maintain),
)dstImg, err := resigif.Resize(
ctx,
srcImg,
width,
height,
resigif.WithAspectRatio(resigif.Ignore),
)
```- Resizing algorithm
- You can use you own resizing algorithm by implementing `ImageResizeFunc` interface and passing it to `WithImageResizeFunc()`
- If you want to use `golang.org/x/image/draw.Scaler`, you can use `FromDrawScaler()` to convert it to `ImageResizeFunc````go
dstImg, err := resigif.Resize(
ctx,
srcImg,
width,
height,
resigif.WithImageResizeFunc(resigif.FromDrawScaler(draw.BiLinear)),
)
```- Parallelism
- You can control the number of goroutine used for resizing by passing `WithParallel()````go
dstImg, err := resigif.Resize(
ctx,
srcImg,
width,
height,
resigif.WithParallel(3),
)
```