TIFFDITHER(1)

πŸ’– TIFFDITHER πŸ’–

okay bestie, welcome to tiffdither from LibTIFF β€” she's a little command with one job and she does it flawlessly. no cap. let's get into it πŸ¦‹


✨ NAME ✨

tiffdither β€” convert a greyscale TIFF image to bilevel using dithering πŸ’…


🌸 SYNOPSIS 🌸

tiffdither [ options ] input.tif output.tif

πŸŽ€ DESCRIPTION πŸŽ€

So here's the tea: tiffdither takes a single channel 8-bit greyscale image and turns it into a bilevel image using Floyd-Steinberg error propagation with thresholding. that's it. that's the whole vibe. she takes your fancy grayscale and gives you the crunchy two-tone look, and she does it properly, not just slapping a hard cutoff on it. πŸ’–


πŸ‘‘ OPTIONS πŸ‘‘

  • -c compress β€” pick the compression for the data getting written to your output file. your choices are:
    • none β€” no compression 🫢
    • packbits β€” PackBits compression
    • lzw β€” Lempel-Ziv & Welch compression
    • zip β€” Deflate compression
    • g3 β€” CCITT Group 3 (T.4) compression
    • g4 β€” for CCITT Group 4 (T.6) compression

If you don't say anything, tiffdither will compress the data according to whatever the Compression tag in the source file says. default queen behavior honestly πŸ‘‘

heads up bestie: the CCITT Group 3 and Group 4 compression algorithms can only be used with bilevel data. no exceptions, she will not budge on this.

Group 3 compression can also be specified together with a few T.4-specific options: 1d for 1-dimensional encoding, 2d for 2-dimensional encoding, and fill to force each encoded scanline to be zero-filled so that the terminating EOL code lies on a byte boundary. You hand these over by appending a :-separated list to the g3 option β€” like this, for 2D-encoded data with byte-aligned EOL codes:

-c g3:2d:fill

LZW compression can also be specified together with a predictor value. A predictor value of 2 causes each scanline of the output image to undergo horizontal differencing before it is encoded; a value of 1 forces each scanline to be encoded without differencing. LZW-specific options are specified by appending a :-separated list to the lzw option β€” e.g. this one, for LZW compression with horizontal differencing:

-c lzw:2
  • -f β€” specify the bit fill order to use when writing output data. By default, tiffdither creates a new file with the same fill order as the original. Saying -f lsb2msb forces data to be written with the FillOrder tag set to LSB2MSB, and -f msb2lsb forces data to be written with the FillOrder tag set to MSB2LSB. pick your fighter ⭐
  • -r β€” make each strip have no more than the given number of rows.
  • -t β€” set the threshold value for dithering. By default the threshold value is 128. 🌈

🧚 NOTES 🧚

The dither algorithm is taken from the tiffmedian program (written by Paul Heckbert). giving credit where credit is due, we love to see it 🫢


πŸ’œ SEE ALSO πŸ’œ

pal2rgb (1), fax2tiff (1), tiffinfo (1), tiffcp (1), tiff2bw (3tiff)


🌟 AUTHOR 🌟

LibTIFF contributors πŸ‘‘


1988-2025, LibTIFF contributors


okay that's the whole page bestie, go forth and dither πŸ’…βœ¨ this was TIFFDITHER(1) from LibTIFF, version 4.7, dated Jun 27, 2026 β€” mwah, love u, bye πŸŽ€πŸ¦‹πŸ’–

πŸ“¦ where this page comes from