Skip to content

Split images into tiles. Perform advanced image processing in Go - slice images into tiles, combine the tiles.

License

Notifications You must be signed in to change notification settings

golangFame/imageslicer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

image-slicer

Split images into tiles.

Perform advanced image processing in Go - slice images into tiles, combine the tiles.

Go 1.19+ Ubuntu,Mac,Win Go1.19+ Rigorous Tests Go Fuzz Go.Dev

Checkout out the Tutorial

Idea and Inspiration

I was tasked with building a puzzle game in Go. I struggled to find an article or a library that can accomplishes image slicing. Eventually, I had to settle down with python's image-slicer, and build a microservice Game-Engine.

This incident made me realize that I can build a 35x faster library in Go. Hence, the inception of image-slicer.

Usecase 1: Split images into tiles

Grid [2*2]

hiro 2x2

Grid [3*3]

hiro3x3J

Grid [4*4]

hiro4*4

Grid [2*1]

hiro2x1J

Grid [2*3]

hiro2x3J

Grid [3*4]

hiro3x4

Usecases 2: Join the tiles back together

Grid [2*2]

hiro 2x2R

Grid [3*3]

hiro3x3R

Grid [4*4]

hiro4*4R

Grid [2*1]

hiro2x1R

Grid [2*3]

hiro2x3R

Grid [3*4]

hiro3x4R

Support

You can file an Issue. See documentation in Go.Dev

Getting Started

Download

go get -u github.com/golangFame/imageslicer

Example

Slice Images

Click to Expand
imgUrl := "https://static.wikia.nocookie.net/big-hero-6-fanon/images/0/0f/Hiro.jpg/revision/latest?cb=20180511180437"

img := imageslicer.GetImageFromUrl(imgUrl)

if img == nil {
log.Fatalln("invalid image url or image format not supported!")
}

grid := imageslicer.Grid{2, 2} //rows,columns

tiles := imageslicer.Slice(img, grid)

expectedTiles := int(grid[0] * grid[1])

if len(tiles) != expectedTiles {
log.Fatalf("expected %d rcvd %d\n", expectedTiles, len(tiles))
}

Join the tiles back

Click to Expand
//lets join the tiles back

joinedImg, err := imageslicer.Join(tiles, grid)

if err != nil {
log.Fatalf("joining tiles failed due to %s", err)
}

shapeJ := joinedImg.Bounds()
shapeI := img.Bounds()

fmt.Println(shapeJ, shapeI) //shape might change due to pixel loss
}

Get Images

//From base64

base64str := "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",


img, err := imageslicer.GetImageFromBase64(base64str)


//From urls

imgUrl := "https://static.wikia.nocookie.net/big-hero-6-fanon/images/0/0f/Hiro.jpg/revision/latest?cb=20180511180437"

img := imageslicer.GetImageFromUrl(imgUrl)

Inspired from ...

Important Notes/Caveats/Pitfalls

  • Use the latest release.
  • Slice(img,grid) (tiles []image.Image)
    • ensure area of grid is greater than 0.
    • ensure img is not nil.
    • its best if the img is downsized to the area of grid to avoid pixel losses. //Will bring support in future releases
  • Join(tiles,grid) (img image.Image, err error)
    • ensure that the grid is the same grid used originally for slicing.
    • the grid is utilized to figure out positions of tiles & the dimensions of the final image.
    • For best results, ensure the tiles were generated by image-slicer.
  • GetImageFromBase64(base64str) (img image.Image, err error)
    • Supports the image tag format i.e "data:image/jpeg;base64,/" as well
    • Supports jpeg,png only
    • Does not support svg, or any other formats
  • GetImageFromUrl(imgUrl) (img image.Image)
    • Supports jpeg,png only!
  • GetImageFromPath(imgLocalPath) (img image.Image, err error)
    • Supports jpeg,png only!

Contribution


  • You can submit an issue or create a Pull Request (PR)