Skip to content
Open

Image #195

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ toolchain go1.24.6

require (
github.com/forPelevin/gomoji v1.3.1
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
golang.org/x/image v0.30.0
golang.org/x/net v0.43.0
golang.org/x/text v0.29.0
)
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
github.com/forPelevin/gomoji v1.3.1 h1:NQvKDXI9et/zb1BTMiHdXG7BcuDbjM60nt0eRf146IE=
github.com/forPelevin/gomoji v1.3.1/go.mod h1:mM6GtmCgpoQP2usDArc6GjbXrti5+FffolyQfGgPboQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
golang.org/x/image v0.30.0 h1:jD5RhkmVAnjqaCUXfbGBrn3lpxbknfN9w2UhHHU+5B4=
golang.org/x/image v0.30.0/go.mod h1:SAEUTxCCMWSrJcCy/4HwavEsfZZJlYxeHLc6tTiAe/c=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
Expand Down
269 changes: 269 additions & 0 deletions image/EXAMPLES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,269 @@
## Image Utilities examples

### Load image from a file

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
)

func main() {
path := "example.png"

img, err := image.LoadFromFile(path)
if err != nil {
log.Fatal(err)
}

fmt.Printf("Loaded image: format=%s, size=%dx%d\n", img.Format, img.Width, img.Height)
}
```

#### Output
`Loaded image: format=png, size=150x150`


### Load an image from URL

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
)

func main() {
url := "https://via.placeholder.com/150.png"

img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

fmt.Printf("Loaded image: format=%s, size=%dx%d\n", img.Format, img.Width, img.Height)
}
```

#### Output
`Loaded image: format=png, size=150x150`


### Convert image to bytes and Base64

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
)

func main() {
url := "https://via.placeholder.com/100.jpg"
img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

data, err := img.ToBytes()
if err != nil {
log.Fatal(err)
}
fmt.Println("Byte length:", len(data))

base64Str, err := img.ToBase64()
if err != nil {
log.Fatal(err)
}
fmt.Println("Base64 length:", len(base64Str))
}
```

#### Output
`Byte length: 829
Base64 length: 1108`

### Resize an image

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
"github.com/nfnt/resize"
)

func main() {
url := "https://via.placeholder.com/200.png"
img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

resized := img.Resize(100, 50, resize.Bilinear)
fmt.Printf("Resized image: %dx%d\n", resized.Width, resized.Height)
}
```

#### Output
`Resized image: 100x50`

### Resize image in place

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
"github.com/nfnt/resize"
)

func main() {
url := "https://via.placeholder.com/120.png"
img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

img.ResizeSelf(60, 30, resize.NearestNeighbor)
fmt.Printf("Image resized in place: %dx%d\n", img.Width, img.Height)
}
```

#### Output
`Image resized in place: 60x30`

### Scale an image

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
"github.com/nfnt/resize"
)

func main() {
url := "https://via.placeholder.com/200.png"
img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

scaled, err := img.Scale(0.5, resize.Bilinear)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Scaled image: %dx%d\n", scaled.Width, scaled.Height)
}
```

#### Output
`Scaled image: 100x100`


### Scale image in place

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
"github.com/nfnt/resize"
)

func main() {
url := "https://via.placeholder.com/150.png"
img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

err = img.ScaleSelf(0.25, resize.Bicubic)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Scaled in place: %dx%d\n", img.Width, img.Height)
}
```

#### Output
`Scaled in place: 37x37`


### Scale down to fit maximum size

```go
package main

import (
"fmt"
"log"

"github.com/kashifkhan0771/utils/image"
"github.com/nfnt/resize"
)

func main() {
url := "https://via.placeholder.com/400x200.png"
img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

scaled, err := img.ScaleDown(150, 150, resize.Lanczos3)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Scaled down: %dx%d\n", scaled.Width, scaled.Height)
}
```

#### Output
`Scaled down: 150x75`

### Save image to file

```go
package main

import (
"log"

"github.com/kashifkhan0771/utils/image"
)

func main() {
url := "https://via.placeholder.com/100.png"
img, err := image.LoadFromURL(url)
if err != nil {
log.Fatal(err)
}

if err := img.SaveToFile("output.png"); err != nil {
log.Fatal(err)
}
}
```
Loading
Loading