nimagemagick is an ImageMagick 7.0 wrapper for Nim. It wraps the MagickCore and MagickWand APIs, though at this point it's mostly a "thin" wrapper. With time more functions will be covered by the wrapper for a convenient interface. See the current progress in src/nimagemagick.nim
The wrapper gets automatically generated at compile time using the nimterop package, which leverages the tree-sitter project.
Requires ImageMagick 7.0 or later. Run convert -version to check. Only tested on Linux.
Contributions are welcome.
nimble install https://github.com/zedeus/nimagemagick.gitimport nimagemagick proc main = # create a new wand, and read the built-in logo image var wand = newWand("logo:") wand.resizeImage(200, 200) wand.displayImage() # save the image wand.writeImage("logo.png") # genesis must be called to setup the MagickWand environment genesis() main() # terminus must be called after the main proc has exited. # If called inside main, the wands will be destroyed after # the environment has terminated, leading to a segfault terminus()See other examples in the examples folder.
To use a function from MagickCore/MagickWand that doesn't yet have a wrapper in wand.nim, ptr MagickWand can be accessed via the impl field of any Wand object. Here's the example above without the convenience wrappers:
import nimagemagick proc main = var wand = newWand() discard MagickReadImage(wand.impl, "logo:") discard MagickResizeImage(wand.impl, 200, 200, LanczosFilter) discard MagickDisplayImage(wand.impl, "") MagickWandGenesis() main() MagickWandTerminus()If you don't want to use the Wand object, replace newWand() with NewMagickWand(), and remember to call DestroyMagickWand(wand).