Adobe Photoshop is not inexpensive. But if you’re fortunate enough to already have it, this does make conversion a bit simpler.
To begin, download and unzip these Photoshop color tables:
Your source image should be in RGB mode (Image→Mode→RGB) if it isn’t already. Use the Image Size and/or crop tools to match the dimensions of your image(s) to your e-ink display.
Then we’ll do the e-ink conversion using Image→Mode→Indexed Color…
From the “Palette:” menu, select “Custom…” then click the “Load…” button to import one of the color tables from the ZIP you downloaded above. Use “eink-3color” to process images for 3-color displays, “eink-2color” for monochrome (black & white) displays.
Then experiment with settings in the Options pane to get the effect you desire (keep the “Preview” box checked to see the results interactively).
Diffusion dithering used here gives us the most bang-for-buck in most cases.
Try different “Amount” settings until you find the right compromise between “too contrasty” (lower values) and “too snowy” (higher values). This is very subjective and the ideal setting will vary from image to image!
A couple of alternate dither settings might be useful in certain situations…
Pattern dithering uses a uniform dot arrangement. It’s usually not the best for photos, as it tends to lose edge details, but may provide a “clean” look for flat artwork and diagrams:
Unlike ImageMagick (explained on the prior page), Photoshop just has one pattern dither setting, there are no available tweaks.
The “None” dither setting may be useful for text, high-contrast line art and 1980s Patrick Nagel prints:
Photoshop also has a “Noise” dither setting — it looks okay for ultra-high-DPI printed matter but is not well suited for these displays.
Once you have a satisfactory conversion, it’s necessary to change the color mode back to RGB (Image→Mode→RGB Color…don’t simply Undo, we need the dithered version in RGB mode, not the original image), then select File→Save As… and use BMP (24 bit) as the file format. That’s what CircuitPython works with…it’s a relatively easy image format for microcontrollers to handle.
Some displays operate natively in a “portrait” orientation (tall vs wide). If your source image is in the opposite orientation, you have two choices…
1. In your CircuitPython code, instruct the display to use a different rotation setting, e.g.:
display.rotation = 1
display.rotation = 1
(try 0, 1, 2 or 3)
2. Alternately, leave the code unchanged and rotate the image using Photoshop:
Image→Image Rotation→90° Clockwise or
Image→Image Rotation→90° Counter Clockwise
Then save as a 24-bit BMP as described above.