복붙노트

[PYTHON] 어떻게 파이썬을 사용하여 디렉토리에있는 모든 이미지의 크기를 확인하려면?

PYTHON

어떻게 파이썬을 사용하여 디렉토리에있는 모든 이미지의 크기를 확인하려면?

디렉토리의 이미지 크기를 확인해야합니다. 현재 ~ 700 이미지가 있습니다. 크기를 확인하기 만하면됩니다. 크기가 지정된 치수와 일치하지 않으면 다른 폴더로 이동됩니다. 시작하려면 어떻게해야합니까?

해결법

  1. ==============================

    1.Python 이미징 라이브러리 (일명 PIL)를 사용하여 이미지 헤더를 읽고 차원을 쿼리 할 수 ​​있습니다.

    Python 이미징 라이브러리 (일명 PIL)를 사용하여 이미지 헤더를 읽고 차원을 쿼리 할 수 ​​있습니다.

    파일 이름을 취하고 치수를 반환하는 함수 (PIL 사용)를 직접 작성하는 것이 한 가지 방법입니다. 그런 다음 os.path.walk 함수를 사용하여이 함수를 적용하여 디렉토리의 모든 파일을 탐색합니다. 결과를 모으고 filename -> dimensions 매핑을 사전으로 만든 다음 목록 이해 (itertools 참조)를 사용하여 필요한 크기와 일치하지 않는 것을 필터링 할 수 있습니다.

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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} }
    
  7. 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