Redimensionamento de imagens em lote
Posted by Mathias Grimm on agosto 24, 2008 in Python
Bom dia a todos.
Novamente fiz um artigo motivado pela necessidade. Nesse caso fiz um programa para praticar python pois sei que existem alguns programas que já fazem isso que preciso.
A necessidade era redimensionar todos arquivos de uma pasta.
Tirei as fotos com a resolução máxima da camera e agora preciso compartilhar os arquivos, decidi então redimensionar todas fotos para 640x600 (padrão vga).
Dessa vez utilizei o Windows, instalei o python 2.5 e a lib PIL (Python image Library - http://www.pythonware.com/products/pil/)
O funcionamento do programa é o seguinte: python pyresizer.py c:/pasta/das/fotos 640x480
Para que o python funcione corretamente no windows, você deve atualizar as variaveis de ambiente para que o comando python seja reconhecido em qualquer
diretório, digitando o seguinte comando no prompt de comando: set path=%path%;c:\Python25; .Assumindo que o diretório da instalação do python seja em c:/Python25.
Essas configurações só serão válidas para a sessão atual do prompt de comando.Existem maneiras de salvar essa configuração mas o foco do artigo não é esse.
Imagem 1:
Perceba que foi criado o diretório pyresizer dentro da pasta de fotos que foi informada, e dentro da pasta pyresizer foi criada a pasta 800x600 que é a pasta
que utilize no teste do programa.
Veja na images 2 que o aspecto das imagens foi mantido pois o programa identifica se as fotos estão com disposição paisagem ou retrato.
Imagem 2:
Segue abaixo o código do pyresizer.py
#author: Mathias Grimm - mathiasgrimm.com.br #date: 24/08/2008 import Image #http://www.pythonware.com/products/pil/ import sys import os try: #path dir = sys.argv[1].replace('\\','/') if os.path.exists(dir): #dimension X x Y newXY = sys.argv[2] newXY = newXY.lower().split('x') #integer is required for resize method newXY[0] = int(newXY[0]) newXY[1] = int(newXY[1]) #creating save path try: newDir = os.path.join(dir,'pyresizer') os.mkdir(newDir) except: print 'Can\'t create dir '+newDir #creating XxY path try: saveDir = os.path.join(newDir,sys.argv[2].lower()) os.mkdir(saveDir) except: print 'Can\'t create dir ',saveDir if os.path.exists(saveDir): #path dictionary dcDir = os.listdir(dir) #files found total = len(dcDir) print 'Found %s file(s).'%(total) for file in dcDir: atual = os.path.join(dir,file) print file try: img = Image.open(atual) #getting current image size size = img.size x = size[0] y = size[1] #keeping aspect ratio if x > y: newX = newXY[0] newY = newXY[1] else: newX = newXY[1] newY = newXY[0] newImg = img.resize((newX,newY)) #saving resized on currentpath/tmp currentSaveDir = os.path.join(saveDir,file) newImg.save(currentSaveDir) except: #not a image or don't have permission, for example... print 'Can\'t resize ',atual else: print 'Files saved on '+saveDir else: print 'Can\'t create save path. Aborting...' else: print dir+' invalid dir! aborting...' except IndexError: print 'Usage: python pyresizer.py path/to/resize/ NEWXxNEWY'
É isso...
clique aqui para baixar os arquivos utilizados nesse artigos.
Agradeço a visita de todos e voltem sempre!
1 Comentário on Redimensionamento de imagens em lote
By Alvaro Figueiredo on agosto 25, 2008 at 6:12 am
Creio que seja possível dispensar a manipulação da variável de ambiente PATH no MS Windows XP. Em vez de executar python script.py, experimente executar simplesmente script.py. Isso deve funcionar sempre que a extensão for .py.
Parabéns pela iniciativa de compartilhar a sua experiência. Espero que continue investindo no seu aprendizado em Python.
Subscribe
Follow comments by subscribing to the Redimensionamento de imagens em lote Comments RSS feed.