daffodil, a D image processing library

Relja Ljubobratovic via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Fri Jul 1 04:09:49 PDT 2016


On Thursday, 30 June 2016 at 21:35:37 UTC, Benjamin Schaaf wrote:
> daffodil is a image processing library inspired by python's 
> Pillow (https://pillow.readthedocs.org/). It is an attempt at 
> designing a clean, extensible and transparent API.
>
> https://github.com/BenjaminSchaaf/daffodil
> https://benjaminschaaf.github.io/daffodil/
>
> The library makes full use out of D's templates and 
> metaprogramming. The internal storage mechanism is entirely 
> configurable from almost every endpoint. File headers are 
> directly loaded into structs defining them, removing most of 
> the difficulties in reading them according to spec. The image 
> type and loading API is entirely extensible, making extra image 
> formats entirely self-contained.
>
> Currently only loading and saving of simple BMP images is 
> supported, with convolution and Gaussian Blur filters and flip 
> transformations. Its still early in development, but I'd love 
> to get some feedback on it.
>
> Example:
> ---
> import daffodil;
> import daffodil.filter;
> import daffodil.transform;
>
> void main() {
>     auto image = load!32("daffodil.bmp");
>
>     image.gaussianBlurred(1.4).save("blurry_daffodil.bmp");
>
>     image.flipped!"y".save("upside_down_daffodil.bmp");
> }
> ---
>
> The license is MIT, so feel free to do whatever you want with 
> the code. Issues and pull requests are of course welcome ;)
>
> Alongside I've also written (an admittedly hacky) sphinx 
> (http://www.sphinx-doc.org/en/stable/) extension that provides 
> a domain and autodocumenter for D, using libdparse and pyd.

Hi there. Took a quick look at the source and it seems really 
nice! I like your idea of extensibility for color conversion. 
Also, image I/O seems to be set up quite nicely for a starting 
point. Although I have to comment that bit depth shouldn't be a 
template argument, in my opinion. When loading images, bit depth 
should be determined in the runtime, depending on the image you'd 
be loading at the moment. Or am I wrong? - do you have some other 
way of handing this case?

Also wanted to let you know I've been working on a similar 
library for some time now [1].
Hope we could merge some modules and learn from each other, and 
not have multiple different implementations of the same stuff. 
Please let me know if your interested.

[1] https://github.com/ljubobratovicrelja/dcv


More information about the Digitalmars-d-announce mailing list