changeset 139:be98236e2b34

Added a function to generate thumbnails, although it's not currently being used anywhere.
author Atul Varma <varmaa@toolness.com>
date Thu, 03 Apr 2008 22:25:58 -0700
parents eb025a398f16
children e48318d2ff8a
files personasbackend/personas/models.py
diffstat 1 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/personasbackend/personas/models.py	Thu Apr 03 14:50:37 2008 -0700
+++ b/personasbackend/personas/models.py	Thu Apr 03 22:25:58 2008 -0700
@@ -66,6 +66,55 @@
 
 NO_THUMBNAIL_IMAGE = "https://addons.mozilla.org/img/addon-icn.png"
 
+def generate_thumbnail( header_file, footer_file ):
+    """
+    Given a header and footer file--which can be either file-like
+    objects or absolute paths to files--returns a PIL image
+    representing the Persona's thumbnail.
+    """
+
+    import Image
+
+    header = Image.open( header_file )
+    footer = Image.open( footer_file )
+
+    # Downsample the header and footer to 50% of original size.
+
+    header = header.resize( (header.size[0] / 2,
+                             header.size[1] / 2),
+                            Image.ANTIALIAS )
+    footer = footer.resize( (footer.size[0] / 2,
+                             footer.size[1] / 2),
+                            Image.ANTIALIAS )
+
+    # Crop the rightmost 1/3 of the header.
+
+    one_third_header = header.size[0] / 3
+    header = header.crop( (header.size[0] - one_third_header,
+                           0,
+                           header.size[0],
+                           header.size[1]) )
+
+    # Crop the leftmost 1/3 of the footer.
+
+    one_third_footer = footer.size[0] / 3
+    footer = footer.crop( (0,
+                           0,
+                           one_third_footer,
+                           footer.size[1]) )
+
+    # Return an image that consists of the header and footer pasted
+    # together.
+
+    thumbnail = Image.new(
+        "RGB",
+        ( header.size[0], header.size[1] + footer.size[1] )
+        )
+    thumbnail.paste( header, (0, 0) )
+    thumbnail.paste( footer, (0, header.size[1]) )
+
+    return thumbnail
+
 def parse_personas_view_url( url ):
     """
     TODO: Document this.