def __init__(self, img_name, fp, geometry_string, options_string): """ Returns fullpath for thumbnail with geometry and options given. First it will try to find the thumbnail in filesystem, secondly it will create it. """ self.options = self.configure_options(options_string) self.image_name = img_name self.image_type = fp.content_type thumbnail_name = self.get_name(geometry_string) image = Image.open(fp) self.thumbnail = FileModel.find_one(name=thumbnail_name) if self.thumbnail is None: self.thumbnail = self.create(image, geometry_string, thumbnail_name)
def save(self, thumbnail, thumbnail_name): """ Saves the thumbnail with format and quality options. Returns thumbnail fullpath """ params = { 'format': self.options['FORMAT'], 'quality': self.options['QUALITY'], 'optimize': 1 } params['progressive'] = (params['format'] == 'JPEG') io = StringIO() try: thumbnail.save(io, **params) except IOError: params.pop('optimize') thumbnail.save(io, **params) io.seek(0) return FileModel.create(io, self.image_type, name=thumbnail_name)
def thumbnail(img_id, geometry): image = FileModel.get(img_id) or abort(http.NOT_FOUND) thumbnail = Thumbnail(img_id, image, geometry, '').thumbnail return x_accel_gridfs(thumbnail.image)