def generate_source_image(source_file, processor_options, generators=None): """ Processes a source ``File`` through a series of source generators, stopping once a generator returns an image. The return value is this image instance or ``None`` if no generators return an image. If the source file cannot be opened, it will be set to ``None`` and still passed to the generators. """ was_closed = source_file.closed if generators is None: generators = [utils.dynamic_import(name) for name in settings.THUMBNAIL_SOURCE_GENERATORS] try: source = source_file try: source.open() except Exception: source = None was_closed = False for generator in generators: image = generator(source, **processor_options) if image: return image finally: if was_closed: source_file.close()
def generate_source_image(source_file, processor_options, generators=None): """ Processes a source ``File`` through a series of source generators, stopping once a generator returns an image. The return value is this image instance or ``None`` if no generators return an image. If the source file cannot be opened, it will be set to ``None`` and still passed to the generators. """ processor_options = _use_default_options(processor_options) was_closed = source_file.closed if generators is None: generators = [ utils.dynamic_import(name) for name in settings.THUMBNAIL_SOURCE_GENERATORS ] try: source = source_file try: source.open() except Exception: source = None was_closed = False for generator in generators: image = generator(source, **processor_options) if image: return image finally: if was_closed: source_file.close()
def generate_source_image(source_file, processor_options, generators=None, fail_silently=True): """ Processes a source ``File`` through a series of source generators, stopping once a generator returns an image. The return value is this image instance or ``None`` if no generators return an image. If the source file cannot be opened, it will be set to ``None`` and still passed to the generators. """ processor_options = ThumbnailOptions(processor_options) # Keep record of whether the source file was originally closed. Not all # file-like objects provide this attribute, so just fall back to False. was_closed = getattr(source_file, 'closed', False) if generators is None: generators = [ utils.dynamic_import(name) for name in settings.THUMBNAIL_SOURCE_GENERATORS ] exceptions = [] try: for generator in generators: source = source_file # First try to open the file. try: source.open() except Exception: # If that failed, maybe the file-like object doesn't support # reopening so just try seeking back to the start of the file. try: source.seek(0) except Exception: source = None try: image = generator(source, **processor_options) except Exception as e: if not fail_silently: if len(generators) == 1: raise exceptions.append(e) image = None if image: return image finally: # Attempt to close the file if it was closed originally (but fail # silently). if was_closed: try: source_file.close() except Exception: pass if exceptions and not fail_silently: raise NoSourceGenerator(*exceptions)
def generate_source_image(source_file, processor_options, generators=None, fail_silently=True): """ Processes a source ``File`` through a series of source generators, stopping once a generator returns an image. The return value is this image instance or ``None`` if no generators return an image. If the source file cannot be opened, it will be set to ``None`` and still passed to the generators. """ processor_options = ThumbnailOptions(processor_options) # Keep record of whether the source file was originally closed. Not all # file-like objects provide this attribute, so just fall back to False. was_closed = getattr(source_file, 'closed', False) if generators is None: generators = [ utils.dynamic_import(name) for name in settings.THUMBNAIL_SOURCE_GENERATORS] exceptions = [] try: for generator in generators: source = source_file # First try to open the file. try: source.open() except Exception: # If that failed, maybe the file-like object doesn't support # reopening so just try seeking back to the start of the file. try: source.seek(0) except Exception: source = None try: image = generator(source, **processor_options) except Exception as e: if not fail_silently: if len(generators) == 1: raise exceptions.append(e) image = None if image: return image finally: # Attempt to close the file if it was closed originally (but fail # silently). if was_closed: try: source_file.close() except Exception: pass if exceptions and not fail_silently: raise NoSourceGenerator(*exceptions)
def process_image(source, processor_options, processors=None): """ Process a source PIL image through a series of image processors, returning the (potentially) altered image. """ if processors is None: processors = [utils.dynamic_import(name) for name in settings.THUMBNAIL_PROCESSORS] image = source for processor in processors: image = processor(image, **processor_options) return image
def process_image(source, processor_options, processors=None): """ Process a source PIL image through a series of image processors, returning the (potentially) altered image. """ processor_options = ThumbnailOptions(processor_options) if processors is None: processors = [ utils.dynamic_import(name) for name in settings.THUMBNAIL_PROCESSORS] image = source for processor in processors: image = processor(image, **processor_options) return image
def get_thumbnail_name(self, thumbnail_options, transparent=False, high_resolution=False): """ Return a thumbnail filename for the given ``thumbnail_options`` dictionary and ``source_name`` (which defaults to the File's ``name`` if not provided). """ thumbnail_options = self.get_options(thumbnail_options) path, source_filename = os.path.split(self.name) source_extension = os.path.splitext(source_filename)[1][1:] preserve_extensions = self.thumbnail_preserve_extensions if preserve_extensions and (preserve_extensions is True or source_extension.lower() in preserve_extensions): extension = source_extension elif transparent: extension = self.thumbnail_transparency_extension else: extension = self.thumbnail_extension extension = extension or 'jpg' prepared_opts = thumbnail_options.prepared_options() opts_text = '_'.join(prepared_opts) data = {'opts': opts_text} basedir = self.thumbnail_basedir % data subdir = self.thumbnail_subdir % data if isinstance(self.thumbnail_namer, six.string_types): namer_func = utils.dynamic_import(self.thumbnail_namer) else: namer_func = self.thumbnail_namer filename = namer_func( thumbnailer=self, source_filename=source_filename, thumbnail_extension=extension, thumbnail_options=thumbnail_options, prepared_options=prepared_opts, ) if high_resolution: filename = self.thumbnail_highres_infix.join( os.path.splitext(filename)) filename = '%s%s' % (self.thumbnail_prefix, filename) return os.path.join(basedir, path, subdir, filename)
def get_thumbnail_name(self, thumbnail_options, transparent=False, high_resolution=False): """ Return a thumbnail filename for the given ``thumbnail_options`` dictionary and ``source_name`` (which defaults to the File's ``name`` if not provided). """ thumbnail_options = self.get_options(thumbnail_options) path, source_filename = os.path.split(self.name) source_extension = os.path.splitext(source_filename)[1][1:] preserve_extensions = self.thumbnail_preserve_extensions if preserve_extensions and ( preserve_extensions is True or source_extension.lower() in preserve_extensions): extension = source_extension elif transparent: extension = self.thumbnail_transparency_extension else: extension = self.thumbnail_extension extension = extension or 'jpg' prepared_opts = thumbnail_options.prepared_options() opts_text = '_'.join(prepared_opts) data = {'opts': opts_text} basedir = self.thumbnail_basedir % data subdir = self.thumbnail_subdir % data if isinstance(self.thumbnail_namer, six.string_types): namer_func = utils.dynamic_import(self.thumbnail_namer) else: namer_func = self.thumbnail_namer filename = namer_func( thumbnailer=self, source_filename=source_filename, thumbnail_extension=extension, thumbnail_options=thumbnail_options, prepared_options=prepared_opts, ) if high_resolution: filename = self.thumbnail_highres_infix.join( os.path.splitext(filename)) filename = '%s%s' % (self.thumbnail_prefix, filename) return os.path.join(basedir, path, subdir, filename)
try: from PIL import Image except ImportError: import Image from easy_thumbnails import utils import os try: from cStringIO import StringIO except ImportError: from StringIO import StringIO DEFAULT_PROCESSORS = [utils.dynamic_import(p) for p in utils.get_setting('PROCESSORS')] SOURCE_GENERATORS = [utils.dynamic_import(p) for p in utils.get_setting('SOURCE_GENERATORS')] def process_image(source, processor_options, processors=None): """ Process a source PIL image through a series of image processors, returning the (potentially) altered image. """ if processors is None: processors = DEFAULT_PROCESSORS image = source for processor in processors: image = processor(image, **processor_options) return image
try: from PIL import Image except ImportError: import Image from easy_thumbnails import utils import os try: from cStringIO import StringIO except ImportError: from StringIO import StringIO DEFAULT_PROCESSORS = [ utils.dynamic_import(p) for p in utils.get_setting('PROCESSORS') ] SOURCE_GENERATORS = [ utils.dynamic_import(p) for p in utils.get_setting('SOURCE_GENERATORS') ] def process_image(source, processor_options, processors=None): """ Process a source PIL image through a series of image processors, returning the (potentially) altered image. """ if processors is None: processors = DEFAULT_PROCESSORS image = source for processor in processors: image = processor(image, **processor_options)
try: from PIL import Image except ImportError: import Image from easy_thumbnails import utils import os try: from cStringIO import StringIO except ImportError: from StringIO import StringIO DEFAULT_PROCESSORS = [ utils.dynamic_import(p) for p in utils.get_setting('PROCESSORS') ] def process_image(source, processor_options, processors=None): """ Process a source PIL image through a series of image processors, returning the (potentially) altered image. """ if processors is None: processors = DEFAULT_PROCESSORS image = source for processor in processors: image = processor(image, **processor_options) return image def save_image(image, destination=None, filename=None, **options):
try: from PIL import Image except ImportError: import Image from easy_thumbnails import utils import os try: from cStringIO import StringIO except ImportError: from StringIO import StringIO DEFAULT_PROCESSORS = [utils.dynamic_import(p) for p in utils.get_setting('PROCESSORS')] def process_image(source, processor_options, processors=None): """ Process a source PIL image through a series of image processors, returning the (potentially) altered image. """ if processors is None: processors = DEFAULT_PROCESSORS image = source for processor in processors: image = processor(image, **processor_options) return image def save_image(image, destination=None, filename=None, **options):
try: from PIL import Image except ImportError: import Image from easy_thumbnails import utils import os try: from cStringIO import StringIO except ImportError: from StringIO import StringIO DEFAULT_PROCESSORS = [utils.dynamic_import(p) for p in utils.get_setting("PROCESSORS")] SOURCE_GENERATORS = [utils.dynamic_import(p) for p in utils.get_setting("SOURCE_GENERATORS")] def process_image(source, processor_options, processors=None): """ Process a source PIL image through a series of image processors, returning the (potentially) altered image. """ if processors is None: processors = DEFAULT_PROCESSORS image = source for processor in processors: image = processor(image, **processor_options) return image