29

How can I convert a JPEG photo to black and white (not grayscale) image like output of a FAX scanner, by ImageMagick?

Giacomo1968
  • 53,069
  • 19
  • 162
  • 212
ohho
  • 2,964
  • 10
  • 36
  • 48

4 Answers4

22

According to this forum post:

However, if you want two colors only (black and white), then you need to threshold. For example, to select the color where above will be white and below will be black.

convert <input> -threshold xx% <output>

where xx is in range 0-100 (for percent).

msnfreaky
  • 113
  • 3
Oliver Salzburg
  • 86,445
  • 63
  • 260
  • 306
19

Dithering is clearer and more fax-like than a threshold cutoff:

convert <input> -monochrome <output>

For a less contrasty but more information-preserving kind of dithering, use:

convert <input> -remap pattern:gray50 <output>

(Docs)

hemflit
  • 496
  • 3
  • 5
  • 1
    Note that if the output looks low-quality, you may need to set the density higher using the flag `-density 150` (the 150 is a dpi value) – David Fraser Dec 22 '15 at 15:22
  • Good answer as it gives 2 options that produce different output and you can choose the best result – golimar Jul 31 '21 at 10:38
9

According to this answer here:

If you have imagemagick installed:

true grayscale only:

convert source.jpg -colorspace Gray destination.jpg

true black and white:

convert source.jpg -monochrome destination.jpg

separate into gray channels:

convert source.jpg -separate destination.jpg
Gabriel Staples
  • 1,818
  • 2
  • 22
  • 34
0

I believe that Netpbm's pamthreshold is a much faster and more flexible solution.

For TIFF files, I do

 $ tifftopnm test.tiff | pamthreshold | pamtotiff > bitonal.tiff

For Jpeg files you can do

$ jpegtopnm test.jpeg | pamthreshold | pamtotiff > bitonal.tiff

Pamthreshold is rather powerful (take a look at its man page).

Maxim
  • 1,556
  • 12
  • 13