Skip to content

Instantly share code, notes, and snippets.

@macndesign
Created November 7, 2012 19:46
Show Gist options
  • Save macndesign/4033922 to your computer and use it in GitHub Desktop.
Save macndesign/4033922 to your computer and use it in GitHub Desktop.
Redimensiona imagens em vários tamanhos e guarda em um arquivo zip com argparse para passar algumas opções via linha de comando.
# coding: utf-8
import os, re, zipfile, argparse
try:
from PIL import Image
except ImportError:
import Image
def normalizar(valor):
"""
Converte em caracteres alfanumericos em caixa baixa com hífen no lugar de espaço.
"""
valor = re.sub('[^\w\s-]', '', valor).strip().lower()
return re.sub('[-\s]+', '-', valor)
def gerar():
"""
Método que faz todo o processo de redimensionamento e compactação das imagens.
Uso:
Se já tem uma pasta com as imagens dentro no mesmo diretório do módulo gerador.py, basta:
> python gerador.py
Abaixo segue um exemplo com todos os argumentos opcionais.
> python gerador.py --nome-zip imagens.zip --pasta-imagens C:\Imagens\ --tamanhos 16 32 64
--modo RGB --extensao bmp
Nota: O exemplo acima gera uma pasta compactada imagens.zip com as imagens contidas em
C:\Imagens de tamanhos 16 32 e 76 pixels em modo RGB com extensão bmp (bitmap).
"""
if os.path.exists(args.pasta_imagens):
LISTA_IMAGENS = os.listdir(args.pasta_imagens)
if not os.path.exists('{0}.zip'.format(args.nome_zip)):
print 'Criando arquivo {0}.zip'.format(args.nome_zip)
zf = zipfile.ZipFile('{0}.zip'.format(args.nome_zip), mode='w')
for img in LISTA_IMAGENS:
arquivo = os.path.join(args.pasta_imagens, img)
obj_img = Image.open(arquivo)
for tam in args.tamanhos:
im = obj_img.resize((tam, tam), Image.ANTIALIAS)
if args.modo:
im.mode = args.modo
if args.extensao:
ext = args.extensao
else:
ext = str(img).split('.')[1]
nome = normalizar(str(img).split('.')[0])
arquivo_saida = '{0}-{1}x{1}px.{2}'.format(nome, tam, ext)
print('{0}'.format(arquivo_saida))
im.save(arquivo_saida)
zf.write(arquivo_saida)
os.remove(arquivo_saida)
zf.close()
else:
print u'O arquivo {0}.zip já existe.'.format(args.nome_zip)
else:
print u'Passe o argumento, exemplo: "python gerador.py --pasta-imagens C:\imagens"\n' \
u'Ou coloque uma pasta nomeada "imagens" no mesmo diretório, com as imagens.'
if __name__ == '__main__':
# Opções para linha de comando
parser = argparse.ArgumentParser(description=u'Gerador de imagens em diversos tamanhos')
parser.add_argument('--nome-zip', type=str, default='imagens', dest='nome_zip', help='Nome do arquivo zip. Ex.: python gerador.py --nome-zip imagens.zip')
parser.add_argument('--pasta-imagens', type=str, default='imagens', dest='pasta_imagens', help='Caminho para a pasta das imagens. Ex.: python gerador.py --pasta-imagens C:\Imagens')
parser.add_argument('--tamanhos', nargs='+', type=int, default=[16, 32, 64, 128], dest='tamanhos', help='Tamanhos das imagens. Ex.: python gerador.py --tamanhos 16 32 64')
parser.add_argument('--modo', type=str, dest='modo', help=u'Modo que serão salvas as imagens. Ex.: python gerador.py --modo RGB')
parser.add_argument('--extensao', type=str, dest='extensao', help=u'Extensão do arquivo. Ex.: python gerador.py --extensao png')
args = parser.parse_args()
gerar()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment