Skip to content

Commit

Permalink
write doc
Browse files Browse the repository at this point in the history
logica0419 committed Aug 31, 2024

Verified

This commit was signed with the committer’s verified signature.
logica0419 logica / Takuto Nagami
1 parent e3dd568 commit a72999b
Showing 1 changed file with 115 additions and 0 deletions.
115 changes: 115 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,117 @@
# 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 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),
)
```

- Changing 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 goroutines used for resizing by passing `WithParallel()`

```go
dstImg, err := resigif.Resize(
ctx,
srcImg,
width,
height,
resigif.WithParallel(3),
)
```

0 comments on commit a72999b

Please sign in to comment.