# HG changeset patch # User boulanni # Date 1264644358 18000 # Node ID d511445f19daa4478a8be179a0491fba47dee090 # Parent dbc806d025a285f27833b39c5af3bcde52c489cf appliquer filtres gimp sur des arrays numpy plutot que sur des fichiers et structure classe diff -r dbc806d025a2 -r d511445f19da transformations/gimp_script.py --- a/transformations/gimp_script.py Wed Jan 27 19:14:37 2010 -0500 +++ b/transformations/gimp_script.py Wed Jan 27 21:05:58 2010 -0500 @@ -2,50 +2,79 @@ # coding: utf-8 ''' -Exemple de script GIMP sous Python +Filtres GIMP sous Python Auteur: Nicolas Boulanger-Lewandowski Date: Hiver 2010 -usage: +run with: gimp -i --batch-interpreter python-fu-eval --batch - < gimp_script.py +inclure pour terminer gimp à la fin du script: +pdb.gimp_quit(0) + Décommenter les lignes appropriées pour différents filtres Les plug-ins de GIMP et leurs paramètres sont disponibles sous GIMP, menu Help > Plug-in Browser (toujours ignorer le paramètre run-mode). Les autres fonctions du programme sont dans la Procedure DataBase (PDB) dans le menu Help > Procedure Browser. ''' from gimpfu import * -import os, glob +import numpy -filename = "images/*.jpg" -folder = "out/" +class GIMPTransformation(): + def __init__(self): + self.img = gimp.Image(32, 32, GRAY) + self.img.disable_undo() + self.layer1 = gimp.Layer(self.img, "layer1", 32, 32, GRAY_IMAGE, 100, NORMAL_MODE) + self.img.add_layer(self.layer1, 0) + self.dest_rgn = self.layer1.get_pixel_rgn(0, 0, 32, 32, True) -filenames = glob.glob(filename) -filenames.sort() + def transform_image(self, image): + ''' si la ligne suivante échoue, upgrader à GIMP v.2.6.7 + OU utiliser une des 2 versions commentées ci-après (10x plus lent) ''' + self.dest_rgn[:,:] = (image.T*255).astype(numpy.uint8).tostring() -for fname in filenames: - img = pdb.gimp_file_load(fname, fname) - layer1 = img.active_layer - img.disable_undo() + #for i in range(32): + # self.dest_rgn[i,:] = (image[i,:]*255).astype(numpy.uint8).tostring() + + #for i in range(32): + # for j in range(32): + # self.dest_rgn[i,j] = chr(int((image[i,j] *255))) + + self.layer1.flush() + self.layer1.update(0, 0, 32, 32) - # Simple filters - #pdb.plug_in_noisify(img, layer1, 0, 0.4, 0, 0, 0) - #pdb.plug_in_c_astretch(img, layer1) - #pdb.plug_in_emboss(img, layer1, 10, 30, 5, 0) - pdb.plug_in_applylens(img, layer1, 2, 1, 0, 0) - #pdb.plug_in_blur(img, layer1) - #pdb.plug_in_gauss_rle(img, layer1, 9, 1, 0) + ''' application des filtres ''' + #pdb.plug_in_noisify(self.img, self.layer1, 0, 0.4, 0, 0, 0) + #pdb.plug_in_c_astretch(self.img, self.layer1) + #pdb.plug_in_emboss(self.img, self.layer1, 10, 30, 5, 0) + #pdb.plug_in_applylens(self.img, self.layer1, 2, 1, 0, 0) + #pdb.plug_in_blur(self.img, self.layer1) + pdb.plug_in_gauss_rle(self.img, self.layer1, 9, 1, 0) + + ''' si la ligne suivante échoue, upgrader à GIMP v.2.6.7 + OU utiliser la version commentée ci-après (10x plus lent) ''' + image = numpy.fromstring(self.dest_rgn[:,:], 'UInt8').reshape((32,32)).T / 255.0 + + #image = image*0 + #for i in range(32): + # for j in range(32): + # image[i,j] = ord(self.dest_rgn[i,j]) /255.0 + + return image + +# TEST +if 1: + im = numpy.zeros((32,32)) + for i in range(32): + for j in range(32): + im[i,j] = i*j/(32.*32.) + + test = GIMPTransformation() + #for i in range(100): + im = test.transform_image(im) - # More complex processing - #layer2 = layer1.copy() - #layer2.mode = MULTIPLY_MODE - #img.add_layer(layer2, 0) - #pdb.plug_in_solid_noise(img, layer2, 0, 0, 0, 8, 8, 8) - #img.flatten() - #layer1 = img.active_layer + import pylab + pylab.imshow(im) + pylab.show() - fname2 = folder + '/' + os.path.basename(fname) - pdb.gimp_file_save(img, layer1, fname2, fname2) - print fname2 - -pdb.gimp_quit(0) + pdb.gimp_quit(0)