A Rust HTTP server that converts images on the fly
Early development stage !!!
In common image convert adds 70-200ms to request processing time.
| Variable | Allowed values | Description |
|---|---|---|
url (required) |
valid url | Image url to be processed |
flip_x |
true or false |
Flip image horizontally |
flip_y |
true or false |
Flip image vertically |
grayscale |
true or false |
Make image grayscale |
blur |
floating number > 0 | Blur image |
crop |
x,y,width,height |
Crop image, x, y are coordinates of top left crop edge |
rotate |
90 or 180or 270 |
Rotate image |
scale |
string in format <width>x<height>[:<algorithm>], e.g. 150x100 or 150x100:cubic |
Scale image preserving aspect ratio |
format |
png, webp, avif or jpeg/jpeg:n |
Convert image to desired format. Configure JPEG quality with n, default is JPEG (quality 95) |
nearest- Nearest neighbor interpolationtriangle- Triangle interpolationcubic- Catmull-Rom interpolation (Cubic interpolation)gaussian- Gaussian interpolationlanczos3- Lanczos3 interpolation
Run redis
docker run -p 6379:6379 redis:alpine# with default port
docker run -p 8080:8080 -e REDIS_URL="redis://localhost:6379" thegriglat/imaginary:latestor
# with custom port
docker run -p 8081:8081 -e PORT=8081 -e REDIS_URL="redis://localhost:6379" thegriglat/imaginary:latestthen open in browser http://localhost:8080/?url=https://upload.wikimedia.org/wikipedia/commons/b/b2/JPEG_compression_Example.jpg&blur=2&rotate=90 (change port if needed)
make build| Variable | Default | Description |
|---|---|---|
PORT |
8080 | Which port Imaginary will listen |
REDIS_URL |
- | Address of redis instance to connect |
REDIS_PREFIX |
imaginary | redis prefix for imaginary entries |
REDIS_TTL |
60 | TTL in seconds for redis cache |
env REDIS_URL="redis://localhost:6379" cargo run If you are reading this -- you know what to do.