BuscaPé, líder em comparação de preços na América Latina

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

  1.  
  2. #author: Mathias Grimm - mathiasgrimm.com.br
  3. #date: 24/08/2008
  4. import Image #http://www.pythonware.com/products/pil/
  5. import sys
  6. import os
  7.  
  8. try:
  9. #path
  10. dir = sys.argv[1].replace('\\','/')
  11.  
  12. if os.path.exists(dir):
  13. #dimension X x Y
  14. newXY = sys.argv[2]
  15. newXY = newXY.lower().split('x')
  16. #integer is required for resize method
  17. newXY[0] = int(newXY[0])
  18. newXY[1] = int(newXY[1])
  19.  
  20. #creating save path
  21. try:
  22. newDir = os.path.join(dir,'pyresizer')
  23. os.mkdir(newDir)
  24. except:
  25. print 'Can\'t create dir '+newDir
  26.  
  27. #creating XxY path
  28. try:
  29. saveDir = os.path.join(newDir,sys.argv[2].lower())
  30. os.mkdir(saveDir)
  31. except:
  32. print 'Can\'t create dir ',saveDir
  33.  
  34. if os.path.exists(saveDir):
  35. #path dictionary
  36. dcDir = os.listdir(dir)
  37.  
  38. #files found
  39. total = len(dcDir)
  40.  
  41. print 'Found %s file(s).'%(total)
  42.  
  43. for file in dcDir:
  44. atual = os.path.join(dir,file)
  45. print file
  46.  
  47. try:
  48. img = Image.open(atual)
  49.  
  50. #getting current image size
  51. size = img.size
  52. x = size[0]
  53. y = size[1]
  54.  
  55. #keeping aspect ratio
  56. if x > y:
  57. newX = newXY[0]
  58. newY = newXY[1]
  59. else:
  60. newX = newXY[1]
  61. newY = newXY[0]
  62.  
  63. newImg = img.resize((newX,newY))
  64.  
  65. #saving resized on currentpath/tmp
  66. currentSaveDir = os.path.join(saveDir,file)
  67. newImg.save(currentSaveDir)
  68.  
  69. except:
  70. #not a image or don't have permission, for example...
  71. print 'Can\'t resize ',atual
  72. else:
  73. print
  74.  
  75. print 'Files saved on '+saveDir
  76. else:
  77. print 'Can\'t create save path. Aborting...'
  78. else:
  79. print dir+' invalid dir! aborting...'
  80.  
  81. except IndexError:
  82. print 'Usage: python pyresizer.py path/to/resize/ NEWXxNEWY'
  83.  

É 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.

Write a Comment on Redimensionamento de imagens em lote

Subscribe

Follow comments by subscribing to the Redimensionamento de imagens em lote Comments RSS feed.

More

Read more posts by Mathias Grimm

FileDiff - encontrando arquivos duplicados Plugin para Vim