Skip to content

dzautner/sprites_on_the_fly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Sprites on the fly

Create dyanmic spritemaps from a folder of images in real

What is this

Someimes you'd like to have 1,300 or so images loaded and filtered dynamically based on user input. That means, usually, 1,300 requests. With this simple script you could get arbitary amount of images from a server served together in one spritmap encoded to base64 and the coordinates from file name to X and Y positions on the map.

In the current state the script would resize all images to the same size as it fits my use case, but that should be quite easy to change.

Usage

python build_spritesheet_server.py --image_size=50 --images_path="./photos"

where image_size is the size the images would be resized to (currently only in ratio of 1:1), and images_path is the path to the folder containing the images.

Running the serer might take a while as it processes all images to memory before booting up the server to have quick response rate.

After the server is running you can query it:

example request:

curl localhost:9999/?ids=1784207670,1784515848,1777490990,1758354452

example response:

{"coordinates": {"1777490990": [0, 50], "1784207670": [0, 0], "1784515848": [50, 0], "1758354452": [50, 50]}, "error": null, "image": "b'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'"}

The response times are reasonably low with my local setup recording 200-300ms responses for a query of 400 pictures and <1000ms responses for 1,300 images.

About

generate spritemaps dynamically

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages