Comme l'indiquent les commentaires, PIL ne charge pas l'image en mémoire lors de l'appel .open. En regardant la documentation de PIL 1.1.7, la docstring for .opendit:
def open(fp, mode="r"):
    "Open an image file, without loading the raster data"
Il y a quelques opérations sur les fichiers dans la source comme:
 ...
 prefix = fp.read(16)
 ...
 fp.seek(0)
 ...
mais ceux-ci ne constituent guère la lecture de l'ensemble du dossier. En fait, .openrenvoie simplement un objet fichier et le nom du fichier en cas de succès. De plus, les documents disent:
  open (fichier, mode = "r")
  
  Ouvre et identifie le fichier image donné.  
  
  C'est une opération paresseuse; cette fonction identifie le fichier, mais les données d'image réelles ne sont pas lues à partir du fichier tant que vous n'essayez pas de traiter les données (ou d'appeler la méthode de chargement ).
En creusant plus profondément, nous voyons que les .openappels _opensont une surcharge spécifique au format d'image. Chacune des implémentations à _openpeut être trouvée dans un nouveau fichier, par exemple. Les fichiers .jpeg sont au format JpegImagePlugin.py. Examinons celui-ci en profondeur.
Ici, les choses semblent devenir un peu délicates, il y a une boucle infinie qui se rompt lorsque le marqueur jpeg est trouvé:
    while True:
        s = s + self.fp.read(1)
        i = i16(s)
        if i in MARKER:
            name, description, handler = MARKER[i]
            # print hex(i), name, description
            if handler is not None:
                handler(self, i)
            if i == 0xFFDA: # start of scan
                rawmode = self.mode
                if self.mode == "CMYK":
                    rawmode = "CMYK;I" # assume adobe conventions
                self.tile = [("jpeg", (0,0) + self.size, 0, (rawmode, ""))]
                # self.__offset = self.fp.tell()
                break
            s = self.fp.read(1)
        elif i == 0 or i == 65535:
            # padded marker or junk; move on
            s = "\xff"
        else:
            raise SyntaxError("no marker found")
Ce qui semble pouvoir lire tout le fichier s'il était mal formé. S'il lit le marqueur d'information OK, cependant, il devrait sortir tôt. La fonction handlerdéfinit finalement self.sizequelles sont les dimensions de l'image.
               
              
.open()lit le fichier entier en mémoire ... (c'est ce que.load()) fait - donc pour autant que je sache - c'est aussi bon que possiblePIL