Ticket #11158: patch

File patch, 1.7 KB (added by kua, 6 years ago)
  • images.py

     
    2121
    2222    def _get_image_dimensions(self):
    2323        if not hasattr(self, '_dimensions_cache'):
    24             close = self.closed
    25             self.open()
    2624            self._dimensions_cache = get_image_dimensions(self)
    27             if close:
    28                 self.close()
    2925        return self._dimensions_cache
    3026
    3127def get_image_dimensions(file_or_path):
    3228    """Returns the (width, height) of an image, given an open file or a path."""
    3329    from PIL import ImageFile as PILImageFile
    3430    p = PILImageFile.Parser()
    35     close = False
     31
     32    we_opened_this_file = False
     33    ptr_pos = -1
    3634    if hasattr(file_or_path, 'read'):
    3735        file = file_or_path
     36        ptr_pos = file.tell()
     37        file.seek(0)
    3838    else:
     39        we_opened_this_file = True
    3940        file = open(file_or_path, 'rb')
    40         close = True
    41     try:
    42         while 1:
    43             data = file.read(1024)
    44             if not data:
    45                 break
    46             p.feed(data)
    47             if p.image:
    48                 return p.image.size
    49         return None
    50     finally:
    51         if close:
    52             file.close()
     41
     42    while 1:
     43        data = file.read(1024)
     44        if not data:
     45            break
     46        p.feed(data)
     47        if p.image:
     48            if we_opened_this_file:
     49                pass; # perhaps it needs to be closed?
     50            else:
     51                file.seek(ptr_pos)
     52            return p.image.size
     53
     54    if we_opened_this_file:
     55        pass; # perhaps it needs to be closed?
     56    else:
     57        file.seek(ptr_pos)
     58
     59    return None
Back to Top