7 unstable releases

0.4.0 Sep 24, 2024
0.3.2 Sep 18, 2024
0.3.1 Apr 26, 2023
0.2.1 Apr 2, 2023
0.1.0 Nov 17, 2022

#319 in Images

Download history 50/week @ 2024-07-27 134/week @ 2024-09-14 190/week @ 2024-09-21 49/week @ 2024-09-28 18/week @ 2024-10-05 14/week @ 2024-10-12 1/week @ 2024-10-19

90 downloads per month

MIT license

45KB
1K SLoC

Dithor

What is this library

Basic principles

This library rewrite an image given as input using only two colors a la dithering.

The image is spit in many squares of 5x5 pixels for high resolution mode, or 15x15 pixels for low resolution mode. For each of those squares the average relative luminance is calculated.

This luminance is then used to assign a level to the square. The level is between 0 and 9, 0 for completely bright and 9 fully dark.

High resolution

The content of the square is then filled with the following pattern (depending on the level):

dithor gradiant for levels

Here's a picture showing the same patterns on a bigger surface:

dithor gradiant for levels

Finally here's an example using the painting "The swan, no 1" from Hilma af Klint:

dithor version of the swan

Low resolution

The content of the square is then filled with the following pattern (depending on the level):

dithor gradiant for levels

And here's the same example in low res:

dithor version of the swan in low res

Using colors

When the third parameter is true the output will be in color, the brightest and darkest colors from the 25 or 225 pixels are used to fill the patterns showed above.

Example in high res:

dithor version of the swan in low res

Example in low res:

dithor version of the swan in low res

How to use it

Crate.io

To use this library you can simply call it using:

dithor::dithor("input.jpg", "output.jpg", true, true, true);

Params

  • input: path to the input image, can be a jpg or png
  • output: path to the output image, can be a jpg or png. If the file already exists it will be overwritten
  • overwrite: specify if the output file should overwrite any existing image with the same name
  • color: boolean, if true the output image will be in color otherwhise it will be in black and white
  • high_res: boolean, if true will dither 5x5 pixels if false dither 15x15 pixels

Dependencies

~2.5MB
~52K SLoC