Created
November 7, 2012 19:46
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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