ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> image-sig
image-sig
Re: [Image-SIG] Best Method to Dither a Grayscale image
by Christian M. Jensen other posts by this author
Jul 18 2005 3:37PM messages near this date
[Image-SIG] ImageDraw.ellipse bug | [Image-SIG] Best Method to Dither a Grayscale image
I forgot to mention - the input image is a PNG with alpha channel. I am
down sampling a 32 bit image into 16 bit color using a 565RGB bit order.
Each band ends up looking like an 8bit grayscale image after splitting.

-----Original Message-----
From: image-sig-bounces@[...].org [mailto:image-sig-bounces@[...].org]
On Behalf Of Christian M. Jensen
Sent: Monday, July 18, 2005 2:13 PM
To: image-sig@[...].org
Subject: [Image-SIG] Best Method to Dither a Grayscale image

I would like to convert a 256 level image down to 32 or 64 levels using
the best dithering possible for visual niceness.

Am I better off using im.convert() or im.quantize()?

I have tried upsampling to an RGB image then using a prebuilt 32 gray
palette to downsample to 32 colors but it is not dithering using the
given palette. It appears to be using an adaptive palette or something.

Anyone have any input?

import Image
import ImagePalette

from math import *

def createGray(x):
    values = int(pow(2,x))
    out = []
    for i in range(256):
        k = int(round((i/255.0)*values)/float(values)*255)
        out.append(k)
        out.append(k)
        out.append(k)
    return out

def doDither(im, x):
    data = createGray(x)
    p = ImagePalette.ImagePalette("RGB", data)
    pimage = Image.new("P", (10, 10))
    pimage.putpalette(data)
    im = im.convert(mode="RGB")
    im = im.convert(mode="P", palette=pimage)
    im = im.convert(mode="L")
    return im
    
im = Image.open("input.png")
bands = im.split()

RO = doDither(bands[0], 5)
GO = doDither(bands[1], 6)
BO = doDither(bands[2], 5)

outbands = [RO, GO, BO, bands[3]]
outimage = Image.merge("RGBA", outbands)
outimage.save("output.png")

_______________________________________________
Image-SIG maillist  -  Image-SIG@[...].org
http://mail.python.org/mailman/listinfo/image-sig
_______________________________________________
Image-SIG maillist  -  Image-SIG@[...].org
http://mail.python.org/mailman/listinfo/image-sig

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved