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
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
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))