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)
Beispiel #2
0
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)