[Image-SIG] Sepia with the PIL?

Fredrik Lundh fredrik at pythonware.com
Tue Jul 15 12:41:18 CEST 2008

Alec Bennett wrote:

> I'm wondering if there's some snazzy way to get sepia image conversion 
> with PIL? I'm currently getting black and white like this, which works 
> great:
> enhancer.enhance(0)
> Thanks for any help.

Simple sepia toning is usually made by converting the image to 
grayscale, and then attaching a brownish palette to the image.  See e.g.


To do this in PIL, convert the image to mode "L", and use putpalette to 
attach a suitable palette to the image.  Something like this might work:

from PIL import Image, ImageOps

def make_linear_ramp(white):
     ramp = []
     r, g, b = white
     for i in range(255):
         ramp.extend((r*i/255, g*i/255, b*i/255))
     return ramp

# make sepia ramp (tweak color as necessary)
sepia = make_linear_ramp((255, 240, 192))

im = Image.open("somefile.jpg")

# convert to grayscale
if im.mode != "L":
     im = im.convert("L")

# optional: apply contrast enhancement here, e.g.
im = ImageOps.autocontrast(im)

# apply sepia palette



More information about the Image-SIG mailing list