GIMP (GNU Image Manipulation Program) é um software de código aberto bastante conhecido, que implementa várias ferramentas para processamento e edição de imagens raster (com alguns recursos vetoriais, para lidar com texto, por exemplo), além de algoritmos de conversão para diversos formatos. Permite a manipulação de imagens compostas de múltiplas camadas e possui uma arquitetura baseada em plugins que permite implementar novas funcionalidades.
Originalmente, os plugins eram criados na linguagem funcional Scheme, porém hoje é possível usar Python também, através de uma extensão chamada Gimp-Python.
Um plugin feito em Python deve seguir os seguintes passos:
register()
cadastra a função de processamento na Procedural Database (PDB), permitindo que o GIMP conheça as informações necessárias para executar o plugin.main()
: rotina principal da API.A função de processamento terá realizar alguns passos para poder interagir corretamente com o GIMP:
pdb.gimp_image_undo_group_start()
. A transação pode ser desfeita posteriormente através de undo.pdb.gimp_image_undo_group_end()
.Com isso, o processamento realizado pelo plugin terá um comportamento conforme com outras funcionalidades presentes no software, incluindo a capacidade de ter a operação desfeita (undo).
Exemplo:
# Importa a interface para o GIMP
from gimpfu import *
def stonify(img, drawable, fracture=135, picture=135):
""""""
# Inicia a transação para UNDO
pdb.gimp_image_undo_group_start(img)
# Cria uma camada de lava
pdb.script_fu_lava(img, drawable, 10, 10, 7,
'German flag smooth', 1, 1, 0)
lava = img.layers[0]
w, h = img.width, img.height
# Cria uma camada de ruído
rock = gimp.Layer(img, 'Rock', w, h, RGB_IMAGE,
100, MULTIPLY_MODE)
pdb.gimp_image_add_layer(img, rock, 0)
pdb.plug_in_solid_noise(img, rock, 0, 0, 0, 1, 4, 4)
# Aplica relevo nas camadas
pdb.plug_in_bump_map(img, rock, lava,
fracture, 45, 15, 0, 0, 0, 0, 1, 0, 0)
pdb.plug_in_bump_map(img, rock, drawable,
picture, 45, 30, 0, 0, 0, 0, 1, 0, 0)
lava.visible = 0
# Combina as camadas da imagem em uma só
img.flatten()
pdb.gimp_brightness_contrast (img.layers[0], 30, 10)
# Termina a transação
pdb.gimp_image_undo_group_end(img)
# Registra a função na PDB
register(
# Identificação
'Stonify',
'"Stonify" the image...',
'"Stonify" the image with some noise',
'Luiz Eduardo Borges',
'Luiz Eduardo Borges',
'2008-2010',
# Localização no menu
'<Image>/Filters/Render/Stonify...',
# Modos suportados (todos)
'*',
# Parâmetros
[
(PF_INT, 'fracture', 'Fracture power', 135),
(PF_INT, 'picture', 'Picture power', 135)
],
# Resultados
[],
stonify)
# Executa o plugin
main()
Janela de opções:
Exemplo dos passos para a geração da imagem:
O GIMP também permite que os plugins sejam executados através de linha de comando, usando os parâmetros --no-interface --batch
.
O script precisa estar numa pasta em que o GIMP possa encontrá-lo. Para o GIMP 2.6, a pasta de plugins do usuário fica em .gimp-2.6/plug-ins
abaixo do diretório home
do usuário. Além disso, a extensão requer que PyGTK e suas dependências estejam instaladas.