Je dois vérifier les dimensions des images dans un répertoire. Actuellement, il a ~ 700 images. J'ai juste besoin de vérifier les tailles et si la taille ne correspond pas à une dimension donnée, elle sera déplacée dans un dossier différent. Comment puis-je commencer? p>
8 Réponses :
Vous pouvez utiliser bibliothèque d'imagerie Python (AKA PIL) pour lire les en-têtes d'image et Requête les dimensions. P>
Un moyen d'approcher, il serait de vous écrire une fonction qui prend un nom de fichier et retourne les dimensions (à l'aide de PIL). Ensuite, utilisez la fonction os.path.walk code> pour parcourir tous les fichiers du répertoire, en appliquant cette fonction. Collecte des résultats, vous pouvez créer un dictionnaire de mappages
nom de fichier -> dimensions code>, puis utilisez une compréhension de liste (voir
itoTools code>) pour filtrer ceux qui ne correspondent pas à la taille requise. . p>
Je l'ai fait mais avec Os.listdir à la place .. fonctionne assez bien avec ~ 700 images. Os.Path.walk est-il meilleur?
Si os.listdir code> fait ce dont vous avez besoin, c'est bon. La principale différence est que
os.walk code> se recueille en sous-répertoires.
Un moyen courant est d'utiliser PIL , la bibliothèque d'imagerie Python pour obtenir les dimensions: Ensuite, vous devez faire boucler les fichiers de votre répertoire, vérifier les dimensions par rapport aux dimensions requises et déplacez ces fichiers qui ne correspondent pas. P> P>
Si vous n'avez pas besoin du reste de PIL et que vous ne voulez que des dimensions de l'image de PNG, JPEG et GIF, cette petite fonction (licence BSD) fait le travail bien:
http://code.google.com/p/bfg-pages/source/browse/trunk /pages/getimageinfo.py p>
Cela fonctionne pour moi comme un charme, +1 pour une solution sans bibliothèques de 3e parties.
Comment appelez-vous cette fonction avec? Quelles sont vos données?
Voici un script qui fait ce dont vous avez besoin:
Je suis à peu près satisfait des réponses fournies ci-dessus car cela m'a aidé à écrire une autre réponse simple pour cette question.
Comme la réponse ci-dessus n'a que des scripts, les lecteurs doivent donc fonctionner pour vérifier si elles fonctionnent correctement ou non. J'ai donc décidé de résoudre le problème à l'aide d'une programmation en mode interactif (à l'aide de la coque Python).
Je pense que ce sera clair pour vous. J'utilise Python 2.7.12 Strong> et j'ai installé Bibliothèque d'oreiller Strong> pour utiliser Pil pour accéder à des images.Je dispose de nombreux mages JPG et 1 image PNG dans mon répertoire actuel.
Maintenant, passons à la coquille Python. >>> #Date of creation : 3 March 2017
>>> #Python version : 2.7.12
>>>
>>> import os #Importing os module
>>> import glob #Importing glob module to list the same type of image files like jpg/png(here)
>>>
>>> for extension in ["jpg", 'png']:
... print "List of all " + extension + " files in current directory:-"
... i = 1
... for imgfile in glob.glob("*."+extension):
... print i,") ",imgfile
... i += 1
... print "\n"
...
List of all jpg files in current directory:-
1 ) 002-tower-babel.jpg
2 ) 1454906.jpg
3 ) 69151278-great-hd-wallpapers.jpg
4 ) amazing-ancient-wallpaper.jpg
5 ) Ancient-Rome.jpg
6 ) babel_full.jpg
7 ) Cuba-is-wonderfull.jpg
8 ) Cute-Polar-Bear-Images-07775.jpg
9 ) Cute-Polar-Bear-Widescreen-Wallpapers-07781.jpg
10 ) Hard-work-without-a-lh.jpg
11 ) jpeg422jfif.jpg
12 ) moscow-park.jpg
13 ) moscow_city_night_winter_58404_1920x1080.jpg
14 ) Photo1569.jpg
15 ) Pineapple-HD-Photos-03691.jpg
16 ) Roman_forum_cropped.jpg
17 ) socrates.jpg
18 ) socrates_statement1.jpg
19 ) steve-jobs.jpg
20 ) The_Great_Wall_of_China_at_Jinshanling-edit.jpg
21 ) torenvanbabel_grt.jpg
22 ) tower_of_babel4.jpg
23 ) valckenborch_babel_1595_grt.jpg
24 ) Wall-of-China-17.jpg
List of all png files in current directory:-
1 ) gergo-hungary.png
>>> #So let's display all the resolutions with the filename
... from PIL import Image #Importing Python Imaging library(PIL)
>>> for extension in ["jpg", 'png']:
... i = 1
... for imgfile in glob.glob("*." + extension):
... img = Image.open(imgfile)
... print i,") ",imgfile,", resolution: ",img.size[0],"x",img.size[1]
... i += 1
... print "\n"
...
1 ) 002-tower-babel.jpg , resolution: 1024 x 768
2 ) 1454906.jpg , resolution: 1920 x 1080
3 ) 69151278-great-hd-wallpapers.jpg , resolution: 5120 x 2880
4 ) amazing-ancient-wallpaper.jpg , resolution: 1920 x 1080
5 ) Ancient-Rome.jpg , resolution: 1000 x 667
6 ) babel_full.jpg , resolution: 1464 x 1142
7 ) Cuba-is-wonderfull.jpg , resolution: 1366 x 768
8 ) Cute-Polar-Bear-Images-07775.jpg , resolution: 1600 x 1067
9 ) Cute-Polar-Bear-Widescreen-Wallpapers-07781.jpg , resolution: 2300 x 1610
10 ) Hard-work-without-a-lh.jpg , resolution: 650 x 346
11 ) jpeg422jfif.jpg , resolution: 2048 x 1536
12 ) moscow-park.jpg , resolution: 1920 x 1200
13 ) moscow_city_night_winter_58404_1920x1080.jpg , resolution: 1920 x 1080
14 ) Photo1569.jpg , resolution: 480 x 640
15 ) Pineapple-HD-Photos-03691.jpg , resolution: 2365 x 1774
16 ) Roman_forum_cropped.jpg , resolution: 4420 x 1572
17 ) socrates.jpg , resolution: 852 x 480
18 ) socrates_statement1.jpg , resolution: 1280 x 720
19 ) steve-jobs.jpg , resolution: 1920 x 1080
20 ) The_Great_Wall_of_China_at_Jinshanling-edit.jpg , resolution: 4288 x 2848
21 ) torenvanbabel_grt.jpg , resolution: 1100 x 805
22 ) tower_of_babel4.jpg , resolution: 1707 x 956
23 ) valckenborch_babel_1595_grt.jpg , resolution: 1100 x 748
24 ) Wall-of-China-17.jpg , resolution: 1920 x 1200
1 ) gergo-hungary.png , resolution: 1236 x 928
>>>
{'image_name.jpg' : {'width': 100, 'heigth': 100} }
Bien que l'idée de votre code soit bonne, il manque une explication. Je ferai également remarquer que les variables qui sont dans toutes les capsules sont généralement utilisées pour les constantes, ce qui l'utilise pour un dict comme vous l'avez fait avec taille_images code> n'est pas quelque chose que je recommanderais.
S'il vous plaît, je pourrais réévaluer ma réponse.
Vous pouvez également utiliser la bibliothèque CV2 pour vérifier les dimensions des images.
import cv2 # read image img = cv2.imread('boarding_pass.png', cv2.IMREAD_UNCHANGED) # get dimensions of image dimensions = img.shape # height, width, number of channels in image height = img.shape[0] width = img.shape[1] channels = img.shape[2] print('Image Dimension : ',dimensions) print('Image Height : ',height) print('Image Width : ',width) print('Number of Channels : ',channels)
Si vous utilisez IPYTHON / JUPYTER Notebook em>, cette fonction fonctionne comme un charme. La commande qui vient utile est fichier code> sous la borne Linux. Mérite que vous demandez? Ici:
def get_image_size_faster(file_dir, ext='png'):
"""
Function to retrieve image size without loading the image at all
params:
file_dir = path of the folder containing image files
dim_index = index of image dimensions in the `file $file_path` call output
For PNG : -3 # Downloads/test.png: PNG image data, 4032 x 3024, 8-bit/color RGB, non-interlaced
For JPEG/JPG : -2 # Downloads/test.jpg: JPEG image data,..., baseline, precision 8, 2252x1400, components 3
For GIF : -1 # Downloads/test.gif: GIF image data, version 89a, 498 x 373
"""
dim_index_map = {
'png' : -3,
'jpg' : -2,
'jpeg': -2,
'gif' : -1
}
dim_index = dim_index_map[ext]
files_regex = "{file_dir}/*.{ext}".format(file_dir=file_dir, ext=ext)
outputs = !file $files_regex
dims = [tuple(map(int, x.split(',')[dim_index].strip().split('x'))) for x in outputs]
return dims