web-dev-qa-db-fra.com

Puis-je redimensionner plusieurs images d'un répertoire à 160x160 à la fois?

Je souhaite redimensionner plusieurs images stockées dans plusieurs sous-dossiers d'un répertoire. Et je veux remplacer ces images par des images redimensionnées en supprimant celles d'origine

Pourquoi?

J'ai des icônes de dossier pour beaucoup de contenu dans une partition séparée. Certaines de ces images tournent autour d’un mégaoctet et mesurent 500 x 500, ce qui, à mon avis, est excessif pour les icônes de dossier sur un écran 1080p. Je pense que cela réduit également les performances de Nautilus et occupe un espace précieux.

Comment est la structure du dossier?

├── [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

Je veux que ces .folder.png ‘soient redimensionnés à 160x160. Answer devrait fonctionner sur les répertoires Deep .

Autre informations

  • Les images sont généralement .png mais aussi .icns, .ico
  • Les images peuvent être stockées dans des répertoires très profonds
  • toutes les images ont un format d'image de 1: 1
  • toutes les images sont nommées .folder.extension
  • Il y a un réponse ici mais je pense que cela ne fonctionne que sur une seule image

Je serai heureux de fournir plus d'informations

5
Sumeet Deshmukh

J'ai trouvé une solution facile, lancez les commandes suivantes

Sudo apt-get install nautilus-image-converter
nautilus -q
  • Maintenant, allez dans le répertoire en utilisant Nautilus
  • Assurez-vous que Show hidden files est activé
  • Effectuer une recherche pour .folder
  • Sélectionnez tous les fichiers que vous souhaitez
  • Faites un clic droit et sélectionnez Resize Images
  • Sélectionnez la taille de l'image comme option de taille personnalisée et remplissez la largeur = 160 et la hauteur = 160.
  • Et le nom du fichier comme Redimensionner à la place
  • Presse Enter

Vos images doivent être redimensionnées à 160

Source


Étrangement, cela n'a pas fonctionné sur .icns

4
Yoginee Pingale

Pas en ligne de commande, mais ce script python devrait faire le travail pour vous :)

exécutez-le dans le répertoire racine que vous souhaitez affecter.

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)
1
Wboy