Note: this version is a fork of Efron Licht's version, which no longer compiles. Efron, if you are reading this, you are absolutely welcome to backport whatever you want from here.
I may or may not try to become the official maintainer of the dither cargo package in the future.
Inspired by: http://www.tannerhelland.com/4660/dithering-eleven-algorithms-source-code/
The test photo ( "bunny.png"
) was obtained under the creative common license and is in the public domain.
-
-
Install rust by following the instructions at rustup.rs/
-
Install dither
cargo install dither
-
-
- Download a binary from the binaries repository
-
docker run efronlicht/dither:latest
dither --help
dither INPUT [OUTPUT] [-v] [--dither="floyd"] [--color="bw"] [--depth="1"] [--help]
# no-op
dither bunny.png burkes.png --dither=burkes
dither bunny.png crayon.png --color=crayon
the path to an input image.known good image formats are .png
and .jpg
.
the path to write the output.this will create or truncate the file at the existing location, if necessary.the image type will be inferred from the filename.currently, only .png
and .jpg
are supported.
The color mode to use. Default is "bw" (black and white). Available options are
- bw (default)
- color
- cga
- crayon
- $COLOR
- $FILENAME
grayscale mode.dither to --depth
bits; --depth=1 uses pure black and white, --depth=2 uses black, white, and two shades of gray, etc, etc.
use RGB channels with specified bit depth.i.e, --color=color, --depth=2
uses two bits each for the red, green, and blue channels.
use the crayon color palette.see "crayon.plt" for details.
use the cga color palette.see the wikipedia article or "cga.plt" for details.
single-color mode.dither in black and white to the specified bit depth, then replace white with the given color, using black for the background.
- BLUE
- GREEN
- CYAN
- RED
- MAGENTA
- BROWN
- LIGHT_GRAY
- GRAY
- LIGHT_BLUE
- LIGHT_GREEN
- LIGHT_CYAN
- LIGHT_RED
- LIGHT_MAGENTA
- YELLOW
- WHITE
load a palette from file.palettes are specified as a list of two or more newline-separated 24-bit hexidecimals, with optional 0x prefix.see crayon.plt
and cga.plt
for examples.
// WHITE
0xffffff
// BLACK
0x000000
// RED
0xff0000
// GREEN
0x00ff00
// BLUE
0x0000ff
The type of ditherer to use. Available options are
"floyd"
,"steinberg"
,"floydsteinberg"
(default)"atkinson"
,"stucki"
,"burkes"
,"jarvis"
,"judice"
,ninke"
"sierra"
,"sierra3"
See the documentation or Tanner Helland's article for technical details.
Verbose debug output to stderr.
The bit depth to compress each channel to. Should be an unsigned integer between 1 and 7 (default 1). Mutally exclusive with the --color= $FILENAME
, color==cga
, and --color=crayon
options.