SlideShare une entreprise Scribd logo
1  sur  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

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
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/
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
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
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
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
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”
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”?
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
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?
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
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)
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,
)
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?

Contenu connexe

Similaire à (2013-10-17) [LatinoWare] Automatizando o GIMP com Python

O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com Python
Marinho Brandão
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
Pablo Dall'Oglio
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primário
Carlos Melo
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
Pablo Dall'Oglio
 

Similaire à (2013-10-17) [LatinoWare] Automatizando o GIMP com Python (20)

Aplicações com Tecnologias Web
Aplicações com Tecnologias WebAplicações com Tecnologias Web
Aplicações com Tecnologias Web
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!
 
O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com Python
 
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
 
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
(2016-08-13) [Grupy-SP] Plugin pytest-doctest-custom v1.0.0
 
EIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de SoftwareEIIFRO2014 - Desenvolvimento Colaborativo de Software
EIIFRO2014 - Desenvolvimento Colaborativo de Software
 
Git na pratica
Git na praticaGit na pratica
Git na pratica
 
My first app django
My first app djangoMy first app django
My first app django
 
Utilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primárioUtilizando o samba como servidor de domínio primário
Utilizando o samba como servidor de domínio primário
 
Pythonbrasil8
Pythonbrasil8Pythonbrasil8
Pythonbrasil8
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
 
Dos monolitos aos microsserviços - PythonBrasil13
Dos monolitos aos microsserviços - PythonBrasil13Dos monolitos aos microsserviços - PythonBrasil13
Dos monolitos aos microsserviços - PythonBrasil13
 
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Django - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisDjango - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes Plugaveis
 
Desenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaDesenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certa
 
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
(2013-07-05) [fisl] Compatibilidade entre Python 2 e 3
 

Plus de Danilo J. S. Bellini

(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e tox(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e tox
Danilo J. S. Bellini
 

Plus de Danilo J. S. Bellini (20)

(2018-10-18) [ETEC Uirapuru] Segurança da Informação
(2018-10-18) [ETEC Uirapuru] Segurança da Informação(2018-10-18) [ETEC Uirapuru] Segurança da Informação
(2018-10-18) [ETEC Uirapuru] Segurança da Informação
 
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
(2018-08-25) [Flask Conf] Introdução ao Sanic - O Flask Assíncrono
 
(2018-07-14) [Just Python] Números no Python!
(2018-07-14) [Just Python] Números no Python!(2018-07-14) [Just Python] Números no Python!
(2018-07-14) [Just Python] Números no Python!
 
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
(2017-08-12) [GruPy-SP] AudioLazy no GruPy! (+LV2)
 
(2017-07-22) [TDC] Audiolazy em 2017!
(2017-07-22) [TDC] Audiolazy em 2017!(2017-07-22) [TDC] Audiolazy em 2017!
(2017-07-22) [TDC] Audiolazy em 2017!
 
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
(2017-05-27) [Grupy-SP] Polígonos, pontos e outras geometrias no Shapely (GIS)
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
 
(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e tox(2014-11-05) [PythonBrasil] Testando com py.test e tox
(2014-11-05) [PythonBrasil] Testando com py.test e tox
 
(2014-10-27) [SETI-UFLA-MG] AudioLazy
(2014-10-27) [SETI-UFLA-MG] AudioLazy(2014-10-27) [SETI-UFLA-MG] AudioLazy
(2014-10-27) [SETI-UFLA-MG] AudioLazy
 
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
(2014-08-09) [TDC] AudioLazy 0.6 will robotize you!
 
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
(2014-05-24) [Taubaté Perl Mongers] AudioLazy Python DSP (Digital Signal Proc...
 
(2014-04-16) [Garoa HC] Strategy
(2014-04-16) [Garoa HC] Strategy(2014-04-16) [Garoa HC] Strategy
(2014-04-16) [Garoa HC] Strategy
 
(2013-12-18) [Garoa HC] AudioLazy
(2013-12-18) [Garoa HC] AudioLazy(2013-12-18) [Garoa HC] AudioLazy
(2013-12-18) [Garoa HC] AudioLazy
 
(2014-03-26) [7masters] AudioLazy
(2014-03-26) [7masters] AudioLazy(2014-03-26) [7masters] AudioLazy
(2014-03-26) [7masters] AudioLazy
 
(2013-11-29) [RuPy] AudioLazy Python DSP (Digital Signal Processing)
(2013-11-29) [RuPy] AudioLazy Python DSP (Digital Signal Processing)(2013-11-29) [RuPy] AudioLazy Python DSP (Digital Signal Processing)
(2013-11-29) [RuPy] AudioLazy Python DSP (Digital Signal Processing)
 
(2013-10-16) [LatinoWare] Processamento de sinais em Python
(2013-10-16) [LatinoWare] Processamento de sinais em Python(2013-10-16) [LatinoWare] Processamento de sinais em Python
(2013-10-16) [LatinoWare] Processamento de sinais em Python
 
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
(2013-10-03) [PythonBrasil] AudioLazy, processamento de sinais para música, j...
 
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
(2013-09-30) [PythonBrasil] Síntese em tempo real com a AudioLazy
 
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
(2013-10-02) [PythonBrasil] Compatibilidade entre Python 2 e 3
 
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos(2013-07-05) [fisl] Semáforo Gráfico dose para TDD em dojos
(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?