Script em bash para redimensionar e renomear imagens

O script a seguir usa o programa ImageMagick para redimensionar imagens através do comando “convert”. O parâmetro “-resize” redimensiona para uma largura (em pixels) informada – se quiser definir a altura, coloca-se um “x” na frente do valor. Além disso, recebe o nome do arquivo de entrada a ser convertido e o nome do arquivo de saída. Veja mais sobre o ImageMagick no post Edição de Imagens no Linux.

Além de simplesmente redimensionar, esse script considera uma padronização de nomes dos arquivos envolvidos. Desse modo, eliminam-se espaços em branco, pontos e caracteres incomuns, além de deixar o nome mais curto e manter os arquivos em ordem cronológica (geralmente os dispositivos que geram as fotos nomeiam ordenadamente os arquivos). O nome de cada arquivo fica com um número sequencial e com zeros à esquerda, permitindo um bom ordenamento ao listá-los.

Para esse trabalho, considere que todas as imagens estão em um mesmo diretório. O nome dele é importante para gerar os nomes dos arquivos, devendo ser definido pelo local (pode alternar maiúsculas e minúsculas, mas sem espaço) e data (qualquer formato, desde que não separe usando traço), separados por um traço. Uma sugestão: NomeDoLocal-YYYYmes, onde “YYYY” é o ano com 4 dígitos e “mes” é a abreviação do mês em português com 3 caracteres.

O script (nomeado como resize_images.sh) deve estar um nível acima da pasta a ser trabalhada. O nome dessa pasta deve ser informada como argumento da execução desse script, conforme segue (lembre-se de mudar sua permissão de execução através de “chmod +x resize_images.sh”):

Ao recebe o nome do diretório, uma clásula “case” dentro de um “while” é utilizada para perguntar ao usuário se o diretório está com um nome padrão. Se estiver, basta teclar “s” (de “sim”) e ENTER; caso contrário, tecle “n” e renomeie o diretório de modo a conter um único traço com pelo menos 1 caractere antes desse traço.

Primeiramente, são substituídos os espaços em branco por “underlines” (_) nos nomes de todos os arquivos, já que o Linux não se dá muito bem com esses caracteres. É feito um loop para todos os arquivos que tenham as seguintes extensões: jpg, JPG, jpeg, gif, GIF, png e PNG.

Para cada arquivo, o script primeiro deve renomear as extensões JPG (maiúscula) e jpeg para jpg. Depois, renomeia cada arquivo com três dígitos ordenados (000 a 999) e o nome do local (obtido pelo nome da pasta), separados por um traço. Os números vem de um contador e podem conter mais ou menos de 3 dígitos: basta alterar a variável “ndigitos”.

Para executar o redimensionamento, primeiro é verificada a seguinte condição: o arquivo deve ter largura ou altura maior que 800 pixeis. Se for o caso, um arquivo temporário é gravado com a devida conversão. Se o arquivo convertido tiver um tamanho menor que o original, então a substituição é concluída renomeando-se esse arquivo para o nome original, de modo a substitui-lo.