diff --git a/easy_thumbnails/engine.py b/easy_thumbnails/engine.py
index <HASH>..<HASH> 100644
--- a/easy_thumbnails/engine.py
+++ b/easy_thumbnails/engine.py
@@ -71,19 +71,22 @@ def generate_source_image(source_file, processor_options, generators=None):
     passed to the generators.
     """
     processor_options = _use_default_options(processor_options)
-    was_closed = source_file.closed
+    was_closed = getattr(source_file, 'closed', False)
     if generators is None:
         generators = [
             utils.dynamic_import(name)
             for name in settings.THUMBNAIL_SOURCE_GENERATORS]
     try:
-        source = source_file
-        try:
-            source.open()
-        except Exception:
-            source = None
-            was_closed = False
         for generator in generators:
+            source = source_file
+            try:
+                source.open()
+            except Exception:
+                try:
+                    source.seek(0)
+                except Exception:
+                    source = None
+                    was_closed = False
             image = generator(source, **processor_options)
             if image:
                 return image
Improve engine.generate_source_image

Firstly, don't require a close attribute on the source file since not
all file-like objects provide this method. This fixes #<I> and refs #<I>

Secondly, ensure we try to re-open (falling back to seek(0)) between
multiple source generators. Fixes #<I>