Posso redimensionar várias imagens em um diretório para 160x160 de uma só vez? [duplicado]

4

Desejo redimensionar várias imagens armazenadas em várias subpastas em um diretório. E quero substituir essas imagens por redimensionadas, excluindo as originais

Por quê?

Eu tenho ícones de pastas para muito conteúdo em uma partição separada. Algumas dessas imagens estão em torno de um megabyte e são 500 x 500, o que é, na minha opinião, um exagero para os ícones de pasta na tela de 1080p, e eu acho que também está reduzindo o desempenho do nautilus e ocupando algum espaço valioso

Como está a estrutura das pastas?

├── [4.0K]  Zombieland (2009) H
│   ├── [664K]  .folder.png
│   └── [606M]  Zombieland (2009) H.mkv
└── [4.0K]  Zootopia (2016)
    ├── [203K]  .folder.png
    ├── [2.7G]  Zootopia (2016).mkv
    └── [119K]  Zootopia (2016).srt

Eu quero que os .folder.png sejam redimensionados para 160x160. A resposta deve funcionar nos diretórios Deep .

Outros dados

  • As imagens geralmente são .png , mas também .icns , .ico
  • As imagens podem ser armazenadas em diretórios realmente profundos
  • todas as imagens têm proporção de 1: 1
  • todas as imagens são nomeadas .folder.extension
  • Existe uma resposta aqui mas acho que só funciona em uma imagem

Terei prazer em fornecer mais informações

    
por Sumeet Deshmukh 14.05.2017 / 12:22

2 respostas

2

Eu encontrei uma solução fácil, execute os seguintes comandos

sudo apt-get install nautilus-image-converter
nautilus -q
  • Agora vá para o diretório usando o Nautilus
  • Verifique se Show hidden files está ativado
  • Faça uma pesquisa por .folder
  • Selecione todos os arquivos que você deseja
  • Clique com o botão direito e selecione Redimensionar Imagens
  • Selecione o tamanho da imagem como opção de tamanho personalizado e preencha a largura = 160 e Altura = 160
  • E o nome do arquivo como Redimensionar no local
  • Pressione Enter

Suas imagens devem ser redimensionadas para 160

Fonte

Estranhamente, não funcionou em .icns

    
por Yoginee Pingale 14.05.2017 / 12:37
1

Não é linha de comando, mas este script python deve fazer o trabalho para você:)

execute-o no diretório raiz que você deseja afetar.

import PIL,os,glob

DIMENSIONS = (160,160)
FILETYPES = ['*.ico','*.icns','*.png']


def get_pictures_from_directory(subject_path,filetypes):
    lst = []
    for extension in filetypes:
        lst.extend(glob.glob(subject_path+"/"+extension))
    return (lst)

def get_folders_in_curr_directory(directory):
    return ([d for d in os.listdir(directory) if os.path.isdir(os.path.join(directory, d))])


def load_and_resize_image(img_path,size_tuple):
    img = PIL.Image.open(img_path)
    img = img.resize(size_tuple)
    return (img)

def save_image(img,img_path):
    img.save(img_path)


def resize_pictures(pictures,DIMENSIONS):
    for picture in pictures:
        img = load_and_resize_image(picture,DIMENSIONS)
        save_image(img,picture)

def run_recursive_resize(base_path,DIMENSIONS,FILETYPES):
    directories = get_folders_in_curr_directory(base_path)
    pictures = get_pictures_from_directory(base_path,FILETYPES)
    resize_pictures(pictures,DIMENSIONS)
    for directory in directories:
         next_path = base_path +'/'+ directory
         run_recursive_resize(next_path,DIMENSIONS,FILETYPES)

run_recursive_resize('.',DIMENSIONS,FILETYPES)
    
por Wboy 14.05.2017 / 13:23