Bertrand Bordage avatar Bertrand Bordage committed 98796d8

Adds a black padding around images when width and height are specified.

Comments (0)

Files changed (3)

 
 #. `pip install cmsplugin_nivoslider`
 #. Add `'cmsplugin_nivoslider'` to `INSTALLED_APPS`
+#. Add ``'cmsplugin_nivoslider.thumbnail_processors.pad_image',``
+   to your ``THUMBNAIL_PROCESSORS`` (before ``autocrop``)
 #. Run `./manage.py syncdb` (or `./manage.py migrate cmsplugin_nivoslider`
-   if you are using south)
+   if you are using South)
 
 You need to have correctly configured staticfiles for autodiscovering and using themes.
 
+
 Upgrading to 0.4
 ================
 

cmsplugin_nivoslider/templates/nivo/slider.html

             {% endif %}>
         {% for img in images %}
             <img    id="nivo-slide{{img.pk}}-image"
-                    src="{% if object.size %}{% thumbnail img.image object.size crop upscale %}{% else %}{{ img.image.url }}{% endif %}"
-                    data-thumb="{{ img.image.icons.64 }}"
+                    src="{% if object.size %}{% thumbnail img.image object.size %}{% else %}{{ img.image.url }}{% endif %}"
+                    data-thumb="{% thumbnail img.image 64x64 %}"
                     alt="{{img.name|default:''}}" />
             {% spaceless %}
                 <div id="nivo-slide{{img.pk}}-text">

cmsplugin_nivoslider/thumbnail_processors.py

+# Solution found there:
+# http://stackoverflow.com/questions/11960079/padded-fit-with-easy-thumbnails
+
+import Image
+
+def pad_image(image, **kwargs):
+    'Pad an image to make it the same aspect ratio of the desired thumbnail.'
+
+    img_size = image.size
+    des_size = kwargs['size']
+    fit = [float(img_size[i])/des_size[i] for i in xrange(0, 2)]
+
+    if fit[0] > fit[1]:
+        new_image = image.resize((image.size[0],
+                                  int(round(des_size[1] * fit[0]))))
+        top = int((new_image.size[1] - image.size[1])/2)
+        left = 0
+    elif fit[0] < fit[1]:
+        new_image = image.resize((int(round(des_size[0] * fit[1])),
+                                  image.size[1]))
+        top = 0
+        left = int((new_image.size[0] - image.size[0]) / 2)
+    else:
+        return image
+
+    # For transparent
+    #mask=Image.new('L', new_image.size, color=0)
+    #new_image.putalpha(mask)
+
+    # For black
+    new_image.paste((0, 0, 0, 0))
+
+    new_image.paste(image, (left, top))
+    return new_image
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.