[PYTHON] 어떻게 파이썬을 사용하여 디렉토리에있는 모든 이미지의 크기를 확인하려면?
PYTHON어떻게 파이썬을 사용하여 디렉토리에있는 모든 이미지의 크기를 확인하려면?
디렉토리의 이미지 크기를 확인해야합니다. 현재 ~ 700 이미지가 있습니다. 크기를 확인하기 만하면됩니다. 크기가 지정된 치수와 일치하지 않으면 다른 폴더로 이동됩니다. 시작하려면 어떻게해야합니까?
해결법
-
==============================
1.Python 이미징 라이브러리 (일명 PIL)를 사용하여 이미지 헤더를 읽고 차원을 쿼리 할 수 있습니다.
Python 이미징 라이브러리 (일명 PIL)를 사용하여 이미지 헤더를 읽고 차원을 쿼리 할 수 있습니다.
파일 이름을 취하고 치수를 반환하는 함수 (PIL 사용)를 직접 작성하는 것이 한 가지 방법입니다. 그런 다음 os.path.walk 함수를 사용하여이 함수를 적용하여 디렉토리의 모든 파일을 탐색합니다. 결과를 모으고 filename -> dimensions 매핑을 사전으로 만든 다음 목록 이해 (itertools 참조)를 사용하여 필요한 크기와 일치하지 않는 것을 필터링 할 수 있습니다.
-
==============================
2.나머지 PIL이 필요없고 PNG, JPEG 및 GIF의 이미지 크기를 원할 경우이 작은 기능 (BSD 라이센스)으로 작업을 멋지게 처리 할 수 있습니다.
나머지 PIL이 필요없고 PNG, JPEG 및 GIF의 이미지 크기를 원할 경우이 작은 기능 (BSD 라이센스)으로 작업을 멋지게 처리 할 수 있습니다.
http://code.google.com/p/bfg-pages/source/browse/trunk/pages/getimageinfo.py
import StringIO import struct def getImageInfo(data): data = str(data) size = len(data) height = -1 width = -1 content_type = '' # handle GIFs if (size >= 10) and data[:6] in ('GIF87a', 'GIF89a'): # Check to see if content_type is correct content_type = 'image/gif' w, h = struct.unpack("<HH", data[6:10]) width = int(w) height = int(h) # See PNG 2. Edition spec (http://www.w3.org/TR/PNG/) # Bytes 0-7 are below, 4-byte chunk length, then 'IHDR' # and finally the 4-byte width, height elif ((size >= 24) and data.startswith('\211PNG\r\n\032\n') and (data[12:16] == 'IHDR')): content_type = 'image/png' w, h = struct.unpack(">LL", data[16:24]) width = int(w) height = int(h) # Maybe this is for an older PNG version. elif (size >= 16) and data.startswith('\211PNG\r\n\032\n'): # Check to see if we have the right content type content_type = 'image/png' w, h = struct.unpack(">LL", data[8:16]) width = int(w) height = int(h) # handle JPEGs elif (size >= 2) and data.startswith('\377\330'): content_type = 'image/jpeg' jpeg = StringIO.StringIO(data) jpeg.read(2) b = jpeg.read(1) try: while (b and ord(b) != 0xDA): while (ord(b) != 0xFF): b = jpeg.read(1) while (ord(b) == 0xFF): b = jpeg.read(1) if (ord(b) >= 0xC0 and ord(b) <= 0xC3): jpeg.read(3) h, w = struct.unpack(">HH", jpeg.read(4)) break else: jpeg.read(int(struct.unpack(">H", jpeg.read(2))[0])-2) b = jpeg.read(1) width = int(w) height = int(h) except struct.error: pass except ValueError: pass return content_type, width, height
-
==============================
3.한 가지 일반적인 방법은 Python 이미징 라이브러리 인 PIL을 사용하여 크기를 얻는 것입니다.
한 가지 일반적인 방법은 Python 이미징 라이브러리 인 PIL을 사용하여 크기를 얻는 것입니다.
from PIL import Image import os.path filename = os.path.join('path', 'to', 'image', 'file') img = Image.open(filename) print img.size
그런 다음 디렉토리의 파일을 반복 실행하고 필요한 크기와 비교하여 크기를 확인한 다음 일치하지 않는 파일을 이동해야합니다.
-
==============================
4.다음은 필요한 작업을 수행하는 스크립트입니다.
다음은 필요한 작업을 수행하는 스크립트입니다.
#!/usr/bin/env python """ Get information about images in a folder. """ from os import listdir from os.path import isfile, join from PIL import Image def print_data(data): """ Parameters ---------- data : dict """ for k, v in data.items(): print("%s:\t%s" % (k, v)) print("Min width: %i" % data['min_width']) print("Max width: %i" % data['max_width']) print("Min height: %i" % data['min_height']) print("Max height: %i" % data['max_height']) def main(path): """ Parameters ---------- path : str Path where to look for image files. """ onlyfiles = [f for f in listdir(path) if isfile(join(path, f))] # Filter files by extension onlyfiles = [f for f in onlyfiles if f.endswith('.jpg')] data = {} data['images_count'] = len(onlyfiles) data['min_width'] = 10**100 # No image will be bigger than that data['max_width'] = 0 data['min_height'] = 10**100 # No image will be bigger than that data['max_height'] = 0 for filename in onlyfiles: im = Image.open(filename) width, height = im.size data['min_width'] = min(width, data['min_width']) data['max_width'] = max(width, data['max_height']) data['min_height'] = min(height, data['min_height']) data['max_height'] = max(height, data['max_height']) print_data(data) if __name__ == '__main__': main(path='.')
-
==============================
5.나는이 질문에 대해 또 다른 간단한 대답을 쓸 수있게 도와 주었기 때문에 위에 제공된 대답에 상당히 만족하고 있습니다. 위의 대답은 스크립트 만 있으므로 판독기는 제대로 작동하는지 여부를 확인하기 위해 실행해야합니다. 그래서 파이썬 셸에서 대화 형 모드 프로그래밍을 사용하여 문제를 해결하기로 결정했습니다. 나는 그것이 당신에게 명확 할 것이라고 생각합니다. 나는 Python 2.7.12를 사용하고 있으며 PIL을 사용하여 images.I에 액세스하기 위해 Pillow 라이브러리를 설치했으며 현재의 디렉토리에는 jpg mages와 1 png 이미지가 많이 있습니다. 이제 파이썬 셸로 넘어 갑시다.
나는이 질문에 대해 또 다른 간단한 대답을 쓸 수있게 도와 주었기 때문에 위에 제공된 대답에 상당히 만족하고 있습니다. 위의 대답은 스크립트 만 있으므로 판독기는 제대로 작동하는지 여부를 확인하기 위해 실행해야합니다. 그래서 파이썬 셸에서 대화 형 모드 프로그래밍을 사용하여 문제를 해결하기로 결정했습니다. 나는 그것이 당신에게 명확 할 것이라고 생각합니다. 나는 Python 2.7.12를 사용하고 있으며 PIL을 사용하여 images.I에 액세스하기 위해 Pillow 라이브러리를 설치했으며 현재의 디렉토리에는 jpg mages와 1 png 이미지가 많이 있습니다. 이제 파이썬 셸로 넘어 갑시다.
>>> #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 >>>
-
==============================
6.
import os from PIL import Image folder_images = "/tmp/photos" size_images = dict() for dirpath, _, filenames in os.walk(folder_images): for path_image in filenames: image = os.path.abspath(os.path.join(dirpath, path_image)) with Image.open(image) as img: width, heigth = img.size SIZE_IMAGES[path_image] = {'width': width, 'heigth': heigth} print(size_images)
folder_images에서 당신은 그것이 상상하는 화살표 디렉토리에 있습니다. size_images는이 형식의 이미지 크기를 갖는 변수입니다.
Example {'image_name.jpg' : {'width': 100, 'heigth': 100} }
from https://stackoverflow.com/questions/1507084/how-to-check-dimensions-of-all-images-in-a-directory-using-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] flask-admin 양식 : 필드 1의 값에 따라 필드 2의 값 제한 (0) | 2018.11.26 |
---|---|
[PYTHON] 파이썬으로 모듈을 올바르게 임포트하기 (0) | 2018.11.26 |
[PYTHON] 파이썬에서 다른 쓰레드가 덮어 쓰지 않고 raw_input ()에서 입력 값을 읽음 (0) | 2018.11.26 |
[PYTHON] 엑셀 파일에 사전 값 쓰기 (0) | 2018.11.26 |
[PYTHON] sqlalchemy를 사용하여 csv 파일을 데이터베이스에로드 (0) | 2018.11.26 |