Nous allons pixelliser une image couleur dont les dimensions en pixels sont un multiple de 16 (144=16×9). Chaque carré de 16×16 pixel sera remplacé par un carré dont la valeur sera la moyenne des 256 pixels.
split() et merge() qui éclatent et recollent
les trois composantes d'une image couleur.
# -*- coding:Utf-8 -*-
import Image
#pour faire des carres de 16
#p est le nb de carres dans la largeur
#q est le nb de carres dans la longueur
def pixel(l,p,q):
for a in range(q):
for c in range(p):
mo=0
for d in range(16):
for b in range(16):
mo=mo+l[a*256*p+b*16*p+c*16+d]
mo=int(mo/256)
for d in range(16):
for b in range(16):
l[a*256*p+b*16*p+c*16+d]=mo
return l
p=9 # 9 carrés en largeur
q=9 # 9 carrés en longueur
#ouverture et éclatage de l'image
im = Image.open("ivain.png")
r,g,b=im.split()
#transformation de chaque image en liste
#et action de la fonction pixel()
r=list(r.getdata())
r=pixel(r,p,q)
g=list(g.getdata())
g=pixel(g,p,q)
b=list(b.getdata())
b=pixel(b,p,q)
#création de trois nouvelles images
nr = Image.new("L",(16*p,16*q))
nr.putdata(r)
ng = Image.new("L",(16*p,16*q))
ng.putdata(g)
nb = Image.new("L",(16*p,16*q))
nb.putdata(b)
#fusion des trois nouvelles images
imgnew = Image.merge('RGB',(nr,ng,nb))
imgnew.save("ivainpix.png")
fait le 1er novembre 2009