|
|
@@ -8,28 +8,44 @@ Contains classes to handle images related things |
|
|
|
from hyde.plugin import CLTransformer, Plugin |
|
|
|
|
|
|
|
|
|
|
|
import re |
|
|
|
import glob |
|
|
|
import os |
|
|
|
import re |
|
|
|
|
|
|
|
from fswrap import File |
|
|
|
|
|
|
|
try: |
|
|
|
from PIL import Image |
|
|
|
except ImportError: |
|
|
|
# No pillow |
|
|
|
import Image |
|
|
|
from hyde.exceptions import HydeException |
|
|
|
|
|
|
|
|
|
|
|
class PILPlugin(Plugin): |
|
|
|
|
|
|
|
def __init__(self, site): |
|
|
|
super(PILPlugin, self).__init__(site) |
|
|
|
try: |
|
|
|
from PIL import Image |
|
|
|
except ImportError: |
|
|
|
# No pillow |
|
|
|
try: |
|
|
|
import Image |
|
|
|
except ImportError, e: |
|
|
|
raise HydeException('Unable to load PIL: ' + e.message) |
|
|
|
|
|
|
|
self.Image = Image |
|
|
|
|
|
|
|
class ImageSizerPlugin(Plugin): |
|
|
|
|
|
|
|
class ImageSizerPlugin(PILPlugin): |
|
|
|
""" |
|
|
|
Each HTML page is modified to add width and height for images if |
|
|
|
they are not already specified. |
|
|
|
|
|
|
|
# Requires PIL |
|
|
|
""" |
|
|
|
|
|
|
|
def __init__(self, site): |
|
|
|
super(ImageSizerPlugin, self).__init__(site) |
|
|
|
self.cache = {} |
|
|
|
|
|
|
|
|
|
|
|
def _handle_img(self, resource, src, width, height): |
|
|
|
"""Determine what should be added to an img tag""" |
|
|
|
if height is not None and width is not None: |
|
|
@@ -63,7 +79,7 @@ class ImageSizerPlugin(Plugin): |
|
|
|
return "" # Nothing |
|
|
|
# Now, get the size of the image |
|
|
|
try: |
|
|
|
self.cache[src] = Image.open(image.path).size |
|
|
|
self.cache[src] = self.Image.open(image.path).size |
|
|
|
except IOError: |
|
|
|
self.logger.warn( |
|
|
|
"Unable to process image [%s]" % image) |
|
|
@@ -184,7 +200,7 @@ def thumb_scale_size(orig_width, orig_height, width, height): |
|
|
|
return width, height |
|
|
|
|
|
|
|
|
|
|
|
class ImageThumbnailsPlugin(Plugin): |
|
|
|
class ImageThumbnailsPlugin(PILPlugin): |
|
|
|
""" |
|
|
|
Provide a function to get thumbnail for any image resource. |
|
|
|
|
|
|
@@ -255,7 +271,7 @@ class ImageThumbnailsPlugin(Plugin): |
|
|
|
return |
|
|
|
self.logger.debug("Making thumbnail for [%s]" % resource) |
|
|
|
|
|
|
|
im = Image.open(resource.path) |
|
|
|
im = self.Image.open(resource.path) |
|
|
|
if im.mode != 'RGBA': |
|
|
|
im = im.convert('RGBA') |
|
|
|
format = im.format |
|
|
@@ -266,7 +282,7 @@ class ImageThumbnailsPlugin(Plugin): |
|
|
|
resize_width, resize_height = thumb_scale_size(im.size[0], im.size[1], width, height) |
|
|
|
|
|
|
|
self.logger.debug("Resize to: %d,%d" % (resize_width, resize_height)) |
|
|
|
im = im.resize((resize_width, resize_height), Image.ANTIALIAS) |
|
|
|
im = im.resize((resize_width, resize_height), self.Image.ANTIALIAS) |
|
|
|
if width is not None and height is not None: |
|
|
|
shiftx = shifty = 0 |
|
|
|
if crop_type == "center": |
|
|
|