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: about 1 year 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 (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-04-06T18:11:17.000Z (about 1 year ago)
- Last Synced: 2025-04-09T21:51:18.912Z (about 1 year ago)
- Topics: gif, go, image-processing, resize
- Language: Go
- Homepage:
- Size: 798 KB
- Stars: 9
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# resigif
[](https://github.com/logica0419/resigif/actions/workflows/ci.yml) [](https://pkg.go.dev/github.com/logica0419/resigif) [](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 main
import (
"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 := 360
dstImg, 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),
)
```