Redis Module wrapping libGraphicsMagick
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
LICENSE
Makefile
README.md
redismodule.h
rm_graphicsmagick.c

README.md

rm_graphicsmagick: Redis Module wrapping libGraphicsMagick

Provides (some of) the functionality of the GraphicsMagick image processing system inside of redis. Currently very limited functionality is supported more as a POC than anything practical, but it can fairly easily be extended to do whatever "magick" you want.

Building it

Prerequisites

  • libGraphicsMagic.so and header should be installed (ubuntu: apt-get install libgraphicsmagick1-dev), tested with version 1.3.23

Bulding the module

  • in the source folder run make

Running it

  • Run redis-server --loadmodule <path-to-module>/rm_graphicsmagick.so

Image manipulation API

All commands access a string key containing an image in a format GraphicsMagick can handle (See: http://www.graphicsmagick.org/formats.html).

GRAPHICSMAGICK.ROTATE key angle

Rotate image stored in key and updates key with the result. angle is a float value in degrees for rotation.

Reply: String, "OK" on success. Error on error.

GRAPHICSMAGICK.SWIRL key angle

Swirl image stored in key and updates key with the result. angle is a float value in degrees for swirling.

Reply: String, "OK" on success. Error on error.

GRAPHICSMAGICK.BLUR key radius std_dev

Blur image stored in key and update key with the result. radius is the Gaussian radius in pixels, std_dev is the standard deviation of the Gaussian.

Reply: String, "OK" on success. Error on error.

GRAPHICSMAGICK.THUMBNAIL key width height

Scale image stored in key to given width and height and updates key with the result.

Reply: String, "OK" on success. Error on error.

GRAPHICSMAGICK.TYPE key

Return the format of the image stored in key ("PNG", "GIF", etc.). Returns an error if no valid image is stored in key.

Reply: String or error.

Python example

import redis
r = redis.Redis()
with open('/tmp/some_image.png') as f:
    r.set('image_key', f.read())
r.execute_command('GRAPHICSMAGICK.SWIRL', 'image_key', 232.3)
with open('/tmp/swirled_image.png', 'w') as f:
    f.write(r.get('image_key'))

Extending it

See here for details of GraphicsMagick core API: http://www.graphicsmagick.org/api/api.html Look at the implementation of the actually commads GMXXXCommand() functions and add new ones accordingly.

There are a million good ideas about what more can be done with this module, here are some:

  • STORE stye commands so key isn't modified.
  • Format conversion commands.
  • Multi key commands for composing multiple images into new images.
  • Profiling performance and finding optimal formats for doing the manipulation including working with RAW formats and perhaps doing the transformantion in place without copying the data.
  • ...

License

see LICENSE