Beispiel #1
0
    def _generate_version(self, version_path, version_suffix, options):
        """
        Generate Version for an Image.
        value has to be a path relative to the storage location.
        """

        tmpfile = File(tempfile.NamedTemporaryFile())

        try:
            f = self.site.storage.open(self.path)
        except IOError:
            return ""
        im = Image.open(f)
        version_dir, version_basename = os.path.split(version_path)
        root, ext = os.path.splitext(version_basename)
        version = process_image(im, options)
        if not version:
            version = im
        if 'methods' in options:
            for m in options['methods']:
                if callable(m):
                    version = m(version)

        # IF need Convert RGB
        if ext in [".jpg", ".jpeg"] and version.mode not in ("L", "RGB"):
            version = version.convert("RGB")

        # save version
        quality = VERSIONS.get(version_suffix, {}).get("quality",
                                                       VERSION_QUALITY)
        try:
            version.save(
                tmpfile,
                format=Image.EXTENSION[ext.lower()],
                quality=quality,
                optimize=(os.path.splitext(version_path)[1] != '.gif'))
        except IOError:
            version.save(tmpfile,
                         format=Image.EXTENSION[ext.lower()],
                         quality=quality)
        # remove old version, if any
        if version_path != self.site.storage.get_available_name(version_path):
            self.site.storage.delete(version_path)
        self.site.storage.save(version_path, tmpfile)
        # set permissions
        if DEFAULT_PERMISSIONS is not None:
            os.chmod(self.site.storage.path(version_path), DEFAULT_PERMISSIONS)
        return version_path
Beispiel #2
0
    def _generate_version(self, version_path, options):
        """
        Generate Version for an Image.
        value has to be a path relative to the storage location.
        """

        tmpfile = File(tempfile.NamedTemporaryFile())

        try:
            f = self.site.storage.open(self.path)
        except IOError:
            return ""
        im = Image.open(f)
        version_dir, version_basename = os.path.split(version_path)
        root, ext = os.path.splitext(version_basename)
        version = process_image(im, options)
        if not version:
            version = im
        if 'methods' in options:
            for m in options['methods']:
                if callable(m):
                    version = m(version)

        # IF need Convert RGB
        if ext in [".jpg", ".jpeg"] and version.mode not in ("L", "RGB"):
            version = version.convert("RGB")

        # save version
        try:
            version.save(tmpfile, format=Image.EXTENSION[ext.lower()], quality=VERSION_QUALITY, optimize=(os.path.splitext(version_path)[1] != '.gif'))
        except IOError:
            version.save(tmpfile, format=Image.EXTENSION[ext.lower()], quality=VERSION_QUALITY)
        # remove old version, if any
        if version_path != self.site.storage.get_available_name(version_path):
            self.site.storage.delete(version_path)
        self.site.storage.save(version_path, tmpfile)
        # set permissions
        if DEFAULT_PERMISSIONS is not None:
            os.chmod(self.site.storage.path(version_path), DEFAULT_PERMISSIONS)
        return version_path
Beispiel #3
0
 def test_process_image_calls_only_explicit_provided_processors(self):
     version = process_image(self.im, {}, processors=[processor_mark_2])
     self.assertFalse(hasattr(version, 'mark_1'))
     self.assertTrue(hasattr(version, 'mark_2'))
Beispiel #4
0
 def test_process_image_calls_the_stack_of_processors_in_settings(self):
     version = process_image(self.im, {})
     self.assertTrue(hasattr(version, 'mark_1'))
     self.assertTrue(hasattr(version, 'mark_2'))
Beispiel #5
0
 def test_process_image_calls_scale_and_crop(self):
     version = process_image(self.im, {'width': 500, 'height': ""})
     self.assertEqual(version.size, (500, 375))
 def test_process_image_calls_only_explicit_provided_processors(self):
     version = process_image(self.im, {}, processors=[processor_mark_2])
     self.assertFalse(hasattr(version, 'mark_1'))
     self.assertTrue(hasattr(version, 'mark_2'))
 def test_process_image_calls_the_stack_of_processors_in_settings(self):
     version = process_image(self.im, {})
     self.assertTrue(hasattr(version, 'mark_1'))
     self.assertTrue(hasattr(version, 'mark_2'))
 def test_process_image_calls_scale_and_crop(self):
     version = process_image(self.im, {'width': 500, 'height': ""})
     self.assertEqual(version.size, (500, 375))