ldev

Janeiro 5, 2008

PIL - Python Imaging Library

Arquivado em: computers, programming, python — Etiquetas HTML:, , , , — Lucas Nogueira @ 7:20 am

Estou iniciando um estudo sobre o Python Imaging Library e quero fazer uns resumos do que vou aprendendo. Os códigos vão falar por si, então não vou comentar muito …

instalação do PIL:

Windows: pacote .exe ( para python 2.5 )

Debian-based:
sudo apt-get install python-imaging


abrindo uma imagem

import Image
img = Image.open(" ball.png&quot ;) 

Os seguintes atributos podem ser muito úteis nos seus programas:

img.format
img.size
img.mode

lendo e salvando uma imagem

O PIL suporta vários formatos de imagem. Para salvar uma imagem use o método save(filepath , FT=filetype)


import Image

img = Image.open(" ball.png &quot ;)
img.save( "ball-convertida.jpeg" , "JPEG&quot ;)  # o segundo argumento é opcional ..

criando miniaturas


import Image

tsize = 100,100

img = Image.open(" ball.png &quot ;)
img.thumbnail ( tsize , image.ANTIALIAS ) #o image.ANTIALIAS é opcional …
img.save( "ball_mini.png" )

recortando e colando imagensusando o método crop( a , b , c , d ) você pode criar um subretângulo de uma imagem. OBS: a,b são as coordenadas do ponto superior-esquerdo e c,d as coordenadas do ponto inferior-direito. A área do local aonde o retângulo será colado deve ser do mesmo tamanho do retângulo


import Image

img = Image.open("abc.PNG&quot ;) 

rcoord = 25,25 , 100,100

rect = img.crop( rcoord )
rect.transpose( Image.ROTATE_90 ) # faz o pedaco girar 90 graus

img.paste( rect , rcoord )
img.save("abc.PNG&quot ;) 

transformações geométricas


import Image

img = Image.open("ball.PNG&quot ;) 

out = img.resize( (200,200) ) #blah
out = out.rotate( -45 ) # a < 0 -> clockwise ; a > 0 -> anticlockwise
out = out.transpose( Image.ROTATE_90 ) # mesma cois que rotate()
out.save("balll.PNG&quot ;) 

OBS: no métdo transpose() também pode ser usado os atributos:

Image.FLIP_LEFT_RIGHT

Image.FLIP_TOP_BOTTOM

filtros


import ImageFilter
out = img.filter( ImageFilter.DETAIL )

operações com pixelscom o método point() você pode brincar com os valores do pixel. Usando uma função lambda pode-se aplicar algo em todos os pixels

out = img.point(lambda i: i * 1.2) # multiplicando todos os pixels por 1.2

você pode aplicar esses efeitos individualmente


import Image

rcord = 10,10,300,300

img = Image.open("abc.PNG&quot ;)
rect = img.crop(rcord)
rect = rect.point(lambda i: i*2)
img.paste(rect , rcord)
img.save("abc-n.PNG&quot ;) 

escrevendo nas imagens


import Image
import ImageDraw # modulo de primitivas e textos

img = Image.open("abc.PNG&quot ;)
dr = ImageDraw.Draw(img)
pos = 0,0
dr.text( pos , "http://ldev.wordpress.com&quot ;)
img.save("abc-n.PNG&quot ;) 

escrevendo nas imagens usando o ImageFont


import ImageFont

ft = ImageFont.truetype("tahoma.ttf",15)
dr.text( pos , "http://ldev.wordpress.com" , font=ft )

Em breve postarei mais sobre o PIL ! :Dfontes: PIL handbook , eu podia ta matando

1 Comentário »

  1. Muito legal parabéns pelo post.

    Agora uma divida nada a ver com Python.

    Como você coloca os Códigos dentro destas caixinhas?
    Estou começando um blog aqui no wordpress e não consegui usar nada para manter o código organizado.
    Obrigado

    Comentário de rickadt — Junho 17, 2008 @ 12:33 pm

Alimentação RSS de comentários a este artigo. URI do TrackBack

Deixe um comentário

Blog no WordPress.com.