diff transformations/gimp_script.py @ 12:d511445f19da

appliquer filtres gimp sur des arrays numpy plutot que sur des fichiers et structure classe
author boulanni <nicolas_boulanger@hotmail.com>
date Wed, 27 Jan 2010 21:05:58 -0500
parents f2d46bb3f2d5
children 7f5133e1fd23
line wrap: on
line diff
--- 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)