O documento resume uma palestra sobre automatização do GIMP usando Python. A palestra introduz Python e o GIMP, discute como usar Python para criar scripts que automatizam tarefas no GIMP, e fornece exemplos de scripts Python que manipulam imagens no GIMP.
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
(2013-10-17) [LatinoWare] Automatizando o GIMP com Python
1. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Automatizando o GIMP com Python
Palestrante
Danilo de Jesus da Silva Bellini
danilo.bellini [at] gmail.com – Twitter: @danilobellini
Proposta de
João Sebastião de Oliveira Bueno
gwidion [at] gmail.com – Twitter: @gwidion
GIMP – http://www.gimp.org/
Python – http://python.org/
GIMP Python Documentation [by James Henstridge]
http://www.gimp.org/docs/python/index.html
2. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Python
●
Multiparadigma
–
–
Orientado a objetos
–
●
Imperativo/Estrutural
Funcional/Descritivo
Whitespaces têm significado
–
Delimitação de blocos
●
Lembra pseudo-código
●
Multiplataforma
http://python.org/
3. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Especificação e filosofia do Python
●
PEPs (Python Enhancement Proposal)
–
●
http://www.python.org/dev/peps
Documentação
–
http://docs.python.org
–
Tutorial feito pelo Guido
●
●
Existe tradução para o português
PEP20 – The Zen of Python
import this
4. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
5. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
6. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
GIMP
The GNU Image Manipulation Program
●
Raster (Matricial)
–
●
“Image retouching and editing tool”
“G” originalmente era “General”
–
1995 – Início do desenvolvimento
–
1996 – Primeira versão pública
–
S. Kimball e P. Mattis solicitaram a aprovação de R. Stallman para
realizar a mudança
–
1997 – GTK – The GIMP Tool Kit
●
●
LGPL
Licença [L]GPLv3+
–
“The GIMP license has been changed to (L)GPLv3+.”
http://www.gimp.org/release-notes/gimp-2.7.html
7. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Automação do GIMP com Python
Python-Fu
●
Python-Fu / Script-Fu
–
●
Fu de “Kung Fu”, pode significar “intensidade”
Scripts e console
–
–
●
Filters → Python-Fu → Console
Arquivos “.py” executáveis no diretório de plugins
Mesma API do Script-Fu (Scheme)
–
Métodos de “pdb”
–
Nomes com “_” ao invés de “-”
–
Ignorar parâmetros de entrada “modo interativo”
8. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Módulo gimpfu
●
gimp
●
pdb
–
Calculadora
●
register
–
●
main
“gimp” e “pdb” já foram
importados
–
Autocomplete (TAB)
–
Comandos anteriores (↑)
–
Built-ins “help” e “dir”
●
●
Constantes (nomes 100% em
maiúsculas)
–
PF_INT
–
PF_BOOL
–
FG_BUCKET_FILL
–
…
●
Console
Script
–
●
from gimpfu import *
O que é “pdb”?
9. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Exemplos
Console
●
Lista
–
–
●
Iterável
gimp.image_list
gimp.Image
–
–
●
Métodos width e height
Propriedade layers
gimp.Layer
–
Método set_offsets
●
–
●
pdb.gimp_layer_set_offsets
Métodos width e height
Laço for
–
for elemento in iterável:
–
“:” (dois pontos) denota início de bloco
Melhor
detalhado
nos próximos
2 slides
10. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Exemplo
(usando GIMP 2.8.2)
1
File → Create → Logos → Basic II
–
2
Usar valores padrão
Move Tool (Toolbox)
–
Mover os layers para qualquer lugar
3
Layer → New Layer
–
Width = 200 px
–
Height = 200 px
–
Layer Fill Type = Foreground
color
Como centralizar os layers na imagem?
11. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Fil
>>> pdb
ter
<gimp procedural Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
database>
s→
>>> imgs = gimp.image_list()
Py
>>> imgs # Uma lista (valores entre colchetes)
tho
n-F
[<gimp.Image 'Untitled'>]
u→
>>> img = imgs[0]
Co
>>> dir(img) # Usar com help também
ns
[... 'height', ..., 'layers', ..., 'width'] # Há mais informação
ole
>>> img.layers
[<gimp.Layer 'SCRIPT-FU'>, <gimp.Layer 'Highlight'>, <gimp.Layer
'Shadow'>, <gimp.Layer 'Layer'>, <gimp.Layer 'Background'>]
>>> len(img.layers)
5
>>> img.layers[0]
<gimp.Layer 'SCRIPT-FU'>
>>> dir(img.layers[0])
[... 'height', ..., 'set_offsets', ..., 'width'] # Há mais informação
>>> img.layers[0].width
886
>>> for lay in img.layers:
...
lay.set_offsets(int(.5 * (img.width - lay.width)),
int(.5 * (img.height - lay.height)))
...
>>>
Padronização do script
12. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Script
●
Exemplos
https://bitbucket.org/jsbueno/gimp_scripts
–
–
Retângulos (rand_rects.py)
–
●
Centralizar layer (center_layer.py)
Blur (progressive_blur.py)
Instalação
–
Arquivo “.py” executável (chmod +x)
–
Localizado em “~/.gimp-2.8/plug-ins/” (ou equivalente)
–
Mensagens no console (debug)
13. Foz do Iguaçu – PR – 2013-10-17 gimp, pdb o constantes
from gimpfu import * # register main,– Automatizando e GIMP com Python
,
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
def sua_funcao(img, drw): # Pode ter outros parâmetros (e.g., “tamanho”)
# img: objeto gimp.Image
# drw: objeto gimp.Layer
# Operações (cuidado ao agrupar operações de “Undo”
#
e ao armazenar a seleção do usuário)
gimp.displays_flush() # Atualiza a imagem visualizada
Padronização do script
register(
proc_name = "sua_funcao",
blurb = "blurb",
help = "help",
author = "Danilo J. S. Bellini",
copyright = "GPLv3 - ",
date = "2013",
label = "<Image>/Python-Fu/ApenDanilo",
imagetypes = "*",
params = [
# (PF_INT, "tamanho", "Uma descrição aqui", 10),
],
results = [],
function = sua_funcao,
#menu = None, # Implícito no "label"
#domain = None, on_query=None, on_run=None,
)
14. Foz do Iguaçu – PR – 2013-10-17 – Automatizando o GIMP com Python
Danilo de Jesus da Silva Bellini / João Sebastião de Oliveira Bueno
Obrigado!
Perguntas?