87 votes

Comment obtenir la taille de l'image à l'aide de la classe Python standard (sans utiliser de bibliothèque externe) ?

J'utilise Python 2.5. Et en utilisant les classes standard de Python, je veux déterminer la taille de l'image d'un fichier.

J'ai entendu PIL (Python Image Library), mais cela nécessite une installation pour fonctionner.

Comment puis-je obtenir la taille d'une image sans utiliser de bibliothèque externe, en utilisant simplement les propres modules de Python 2.5 ?

Remarque Je souhaite prendre en charge les formats d'image courants, en particulier JPG et PNG.

103voto

Voici un script python 3 qui renvoie un tuple contenant une hauteur et une largeur d'image pour .png, .gif et .jpeg sans utiliser de bibliothèques externes (c'est-à-dire ce que Kurt McKee a référencé ci-dessus). Devrait être relativement facile de le transférer vers Python 2.

 import struct
import imghdr

def get_image_size(fname):
    '''Determine the image type of fhandle and return its size.
    from draco'''
    with open(fname, 'rb') as fhandle:
        head = fhandle.read(24)
        if len(head) != 24:
            return
        if imghdr.what(fname) == 'png':
            check = struct.unpack('>i', head[4:8])[0]
            if check != 0x0d0a1a0a:
                return
            width, height = struct.unpack('>ii', head[16:24])
        elif imghdr.what(fname) == 'gif':
            width, height = struct.unpack('<HH', head[6:10])
        elif imghdr.what(fname) == 'jpeg':
            try:
                fhandle.seek(0) # Read 0xff next
                size = 2
                ftype = 0
                while not 0xc0 <= ftype <= 0xcf:
                    fhandle.seek(size, 1)
                    byte = fhandle.read(1)
                    while ord(byte) == 0xff:
                        byte = fhandle.read(1)
                    ftype = ord(byte)
                    size = struct.unpack('>H', fhandle.read(2))[0] - 2
                # We are at a SOFn block
                fhandle.seek(1, 1)  # Skip `precision' byte.
                height, width = struct.unpack('>HH', fhandle.read(4))
            except Exception: #IGNORE:W0703
                return
        else:
            return
        return width, height

70voto

tjb Points 2869

La réponse de Kurt devait être légèrement modifiée pour fonctionner pour moi.

Tout d'abord, sur Ubuntu : sudo apt-get install python-imaging

Puis:

 from PIL import Image
im=Image.open(filepath)
im.size # (width,height) tuple

Consultez le manuel pour plus d'informations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X