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


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).


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>


  • 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) 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 at 10:38

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


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).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.