diff --git a/sorl/thumbnail/engines/base.py b/sorl/thumbnail/engines/base.py index 18d8cdab0..6f56db15b 100644 --- a/sorl/thumbnail/engines/base.py +++ b/sorl/thumbnail/engines/base.py @@ -118,8 +118,11 @@ def blur(self, image, geometry, options): """ Wrapper for ``_blur`` """ - if options.get('blur'): - return self._blur(image, int(options.get('blur'))) + radius = options.get('blur') + if radius: + if isinstance(radius, str): + radius = int(radius) + return self._blur(image, radius) return image def padding(self, image, geometry, options): diff --git a/sorl/thumbnail/engines/pil_engine.py b/sorl/thumbnail/engines/pil_engine.py index ea754fd77..e0921988c 100644 --- a/sorl/thumbnail/engines/pil_engine.py +++ b/sorl/thumbnail/engines/pil_engine.py @@ -3,7 +3,8 @@ from sorl.thumbnail.engines.base import EngineBase try: - from PIL import Image, ImageDraw, ImageFile, ImageFilter, ImageMode + from PIL import Image, ImageDraw, ImageFile, ImageMode + from PIL.ImageFilter import GaussianBlur except ImportError: import Image import ImageDraw @@ -68,16 +69,6 @@ def round_rectangle(size, radius, fill): return rectangle -class GaussianBlur(ImageFilter.Filter): - name = "GaussianBlur" - - def __init__(self, radius=2): - self.radius = radius - - def filter(self, image): - return image.gaussian_blur(self.radius) - - class Engine(EngineBase): def get_image(self, source): buffer = BytesIO(source.read()) diff --git a/tests/thumbnail_tests/test_engines.py b/tests/thumbnail_tests/test_engines.py index 9ad8e318c..4c51c9d9c 100644 --- a/tests/thumbnail_tests/test_engines.py +++ b/tests/thumbnail_tests/test_engines.py @@ -59,6 +59,15 @@ def test_upscale_and_crop(self): self.assertEqual(t.x, 400) self.assertEqual(t.y, 300) + @unittest.skipIf('pil_engine' not in settings.THUMBNAIL_ENGINE, 'blur is only supported in PIL') + def test_crop_and_blur(self): + item = Item.objects.get(image='200x100.jpg') + + t = self.BACKEND.get_thumbnail(item.image, '100x100', crop="center", blur='3') + + self.assertEqual(t.x, 100) + self.assertEqual(t.y, 100) + def test_kvstore(self): im = ImageFile(Item.objects.get(image='500x500.jpg').image) self.KVSTORE.delete_thumbnails(im)