def get(self, instance, **kwargs): if not self.use_fstorage(instance): return ImageField.get(self, instance, **kwargs) request = instance.REQUEST if not isinstance(request, type('')) and \ instance.REQUEST.get('%s_migrate' % self.getName(), ''): # migrate scales kwargs['migrate'] = True for n in self.getAvailableSizes(instance).keys(): self.getScale(instance, scale=n, **kwargs) return ImageField.get(self, instance, **kwargs)
def rescaleOriginal(context, max_size=(1200,900), dry_run=True): """ Steps: * If Image, use own data --or-- * If News Item, use image field --or-- * Use leadImage field * Determine if it's greater than max dimensions (size) * If yes, scale it down and reset """ if not HAS_PIL: return False portal_type = context.portal_type if portal_type == 'Image': imageObj = context imageField = ImageField() else: if portal_type == 'News Item': imageField = context.getField('image') else: imageField = context.getField(IMAGE_FIELD_NAME) imageObj = imageField.get(context) if not imageObj: status = False width = height = 0 new_dimensions = (0,0) elif imageObj.content_type not in ('image/jpeg', 'image/png', 'image/gif'): status = False width = height = 0 new_dimensions = (0,0) LOG('Products.agCommon.rescaleOriginal', INFO, "Invalid image type %s for %s" % (imageObj.content_type, context.absolute_url()) ) else: width = imageObj.width height = imageObj.height new_dimensions = calculateDimensions(imageObj, max_size=max_size) if (width, height) > new_dimensions: if not dry_run: if isinstance(imageObj.data, str): imageData = imageObj.data else: imageData = imageObj.data.data (resizedImage, format) = imageField.scale(imageData, *new_dimensions) if portal_type == 'Image': context.setImage(resizedImage.read()) else: imageField.set(context, resizedImage.read()) status = True else: status = False return (status, portal_type, context.absolute_url(), (width, height), new_dimensions)