def _get_options(self, version_suffix, extra_options=None): options = dict(VERSIONS.get(version_suffix, {})) if extra_options: options.update(extra_options) if 'size' in options and 'width' not in options: width, height = options['size'] options['width'] = width options['height'] = height return options
def _get_namer(self, version_suffix, file_object=None, **extra_options): if not file_object: file_object = self.F_IMAGE extra_options.update(VERSIONS.get(version_suffix, {})) return self.NAMER_CLASS( file_object=file_object, version_suffix=version_suffix, filename_root=file_object.filename_root, extension=file_object.extension, options=extra_options, )
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 render(self, name, value, attrs=None, renderer=None): if value is None: value = "" if value != "" and not isinstance(value, FileObject): value = FileObject(value, site=self.site) final_attrs = self.build_attrs(attrs, extra_attrs={"type": self.input_type, "name": name}) final_attrs['data-extensions'] = json.dumps(self.extensions) final_attrs['data-thumbnail_size'] = "{}" if self.thumbnail: final_attrs['data-thumbnail'] = self.thumbnail fb_version = VERSIONS.get(self.thumbnail, None) if fb_version: final_attrs['data-thumbnail_size'] = json.dumps(dict( width=fb_version['width'], height=fb_version['height'] )) filebrowser_site = self.site allowed_title = _('Allowed') return render_to_string("uploadfield/uploadfield_widget.html", locals())