view transformations/gimp_script.py @ 20:1e9525aba832

merge
author Xavier Glorot <glorotxa@iro.umontreal.ca>
date Thu, 28 Jan 2010 14:54:28 -0500
parents d511445f19da
children 7f5133e1fd23
line wrap: on
line source

#!/usr/bin/env python
# coding: utf-8

'''
Filtres GIMP sous Python
Auteur: Nicolas Boulanger-Lewandowski
Date: Hiver 2010

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 numpy

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)

    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 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)

        ''' 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)
    
    import pylab
    pylab.imshow(im)
    pylab.show()

    pdb.gimp_quit(0)