26

For lines and ellipses in PIL, the images are rough.

I found antialiasing only in resize and thumbnail.

Is there any way to do antialiasing when drawing a line or ellipse?

Brian Burns
  • 17,878
  • 8
  • 77
  • 67
whi
  • 2,453
  • 5
  • 31
  • 35
  • 1
    You could do a low-pass filtering :) You will probably want to move to `aggdraw` (or `cairo`, or ...) for "fancier" drawing. – mmgp Jan 16 '13 at 03:02

2 Answers2

37

The only way to do it natively is with supersampling. Render your image at a multiple of the size you require, then resize it with resample=Image.ANTIALIAS, e.g.:

im = im.resize((width // 2, height // 2), resample=Image.ANTIALIAS)
Mark Ransom
  • 286,393
  • 40
  • 379
  • 604
  • 2
    @Hugo: In the [`Image.resize()`](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.resize) method of the current stable version of the pillow fork of `PIL`, the keyword argument is named `resample`. This may have been changed in [version 2.7.0](https://pillow.readthedocs.io/en/stable/releasenotes/2.7.0.html?highlight=ANTIALIAS#image-resizing-filters). Also note that `Image.LANCZOS` [is the same thing](https://pillow.readthedocs.io/en/stable/_modules/PIL/Image.html?highlight=ANTIALIAS) as `Image.ANTIALIAS`—which isn't mentioned in the method's documentation. – martineau Apr 29 '19 at 19:14
  • 1
    `img.resize((width, height), Image.ANTIALIAS)` works for me. Thank you ! – cdrom Feb 10 '20 at 15:44
  • I was having this issue with an ellipse mask and following answer helped me: https://stackoverflow.com/a/22336005/1092815 Same answer, but with complete code example – GabLeRoux Mar 30 '20 at 14:06
  • 1
    This is great. Note that 3 times multiplier gives much better results than 2 times, and I felt actually better than 4 times. – Hugh Perkins Nov 14 '21 at 10:30
4

aggdraw (http://effbot.org/zone/aggdraw-index.htm) may be something you're interested in.

The aggdraw module implements the basic WCK 2D Drawing Interface on top of the AGG library. This library provides high-quality drawing, with anti-aliasing and alpha compositing, while being fully compatible with the WCK renderer.

The aggdraw module can be used with PIL or the WCK library (under Tkinter or native Windows). It can also be used as a stand-alone library.

KevinC
  • 181
  • 4