Index: images.py
===================================================================
--- images.py	(revision 10830)
+++ images.py	(working copy)
@@ -21,32 +21,39 @@
 
     def _get_image_dimensions(self):
         if not hasattr(self, '_dimensions_cache'):
-            close = self.closed
-            self.open()
             self._dimensions_cache = get_image_dimensions(self)
-            if close:
-                self.close()
         return self._dimensions_cache
 
 def get_image_dimensions(file_or_path):
     """Returns the (width, height) of an image, given an open file or a path."""
     from PIL import ImageFile as PILImageFile
     p = PILImageFile.Parser()
-    close = False
+
+    we_opened_this_file = False
+    ptr_pos = -1
     if hasattr(file_or_path, 'read'):
         file = file_or_path
+        ptr_pos = file.tell()
+        file.seek(0)
     else:
+        we_opened_this_file = True
         file = open(file_or_path, 'rb')
-        close = True
-    try:
-        while 1:
-            data = file.read(1024)
-            if not data:
-                break
-            p.feed(data)
-            if p.image:
-                return p.image.size
-        return None
-    finally:
-        if close:
-            file.close()
+
+    while 1:
+        data = file.read(1024)
+        if not data:
+            break
+        p.feed(data)
+        if p.image:
+            if we_opened_this_file:
+                pass; # perhaps it needs to be closed?
+            else:
+                file.seek(ptr_pos)
+            return p.image.size
+
+    if we_opened_this_file:
+        pass; # perhaps it needs to be closed?
+    else:
+        file.seek(ptr_pos)
+
+    return None
