Beispiel #1
0
    def _get_raw_data(self, image, format_, quality, image_info=None, progressive=False):
        # Increase (but never decrease) PIL buffer size
        ImageFile.MAXBLOCK = max(ImageFile.MAXBLOCK, image.size[0] * image.size[1])
        bf = BufferIO()

        params = {
            'format': format_,
            'quality': quality,
            'optimize': 1,
        }

        # keeps icc_profile
        if 'icc_profile' in image_info:
            params['icc_profile'] = image_info['icc_profile']

        raw_data = None

        if format_ == 'JPEG' and progressive:
            params['progressive'] = True
        try:
            # Do not save unnecessary exif data for smaller thumbnail size
            params.pop('exif', {})
            image.save(bf, **params)
        except (IOError, OSError):
            # Try without optimization.
            params.pop('optimize')
            image.save(bf, **params)
        else:
            raw_data = bf.getvalue()
        finally:
            bf.close()

        return raw_data
Beispiel #2
0
    def _get_raw_data(self, image, format_, quality, image_info=None, progressive=False):
        # Increase (but never decrease) PIL buffer size
        ImageFile.MAXBLOCK = max(ImageFile.MAXBLOCK, max(image.size)**2)
        bf = BufferIO()

        params = {
            'format': format_,
            'quality': quality,
            'optimize': 1,
        }

        # keeps icc_profile
        if 'icc_profile' in image_info:
            params['icc_profile'] = image_info['icc_profile']

        raw_data = None

        if format_ == 'JPEG' and progressive:
            params['progressive'] = True
        try:
            # Do not save unnecessary exif data for smaller thumbnail size
            params.pop('exif', {})
            image.save(bf, **params)
        except (IOError, OSError):
            # Try without optimization.
            params.pop('optimize')
            image.save(bf, **params)
        else:
            raw_data = bf.getvalue()
        finally:
            bf.close()

        return raw_data
Beispiel #3
0
    def _get_raw_data(self, image, format_, quality, image_info=None, progressive=False):
        # Increase (but never decrease) PIL buffer size
        ImageFile.MAXBLOCK = max(ImageFile.MAXBLOCK, image.size[0] * image.size[1])
        bf = BufferIO()

        params = {"format": format_, "quality": quality, "optimize": 1}

        # keeps icc_profile
        if "icc_profile" in image_info:
            params["icc_profile"] = image_info["icc_profile"]

        raw_data = None

        if format_ == "JPEG" and progressive:
            params["progressive"] = True
        try:
            # Do not save unnecessary exif data for smaller thumbnail size
            params.pop("exif", {})
            image.save(bf, **params)
        except (IOError, OSError):
            # Try without optimization.
            params.pop("optimize")
            image.save(bf, **params)
        else:
            raw_data = bf.getvalue()
        finally:
            bf.close()

        return raw_data
Beispiel #4
0
    def _get_raw_data(self, image, format_, quality, image_info=None, progressive=False):
        ImageFile.MAXBLOCK = image.size[0] * image.size[1]
        bf = BufferIO()

        params = {
            'format': format_,
            'quality': quality,
            'optimize': 1,
        }

        params.update(image_info)

        if format_ == 'JPEG' and progressive:
            params['progressive'] = True
        try:
            image.save(bf, **params)
        except IOError:
            maxblock = ImageFile.MAXBLOCK

            try:
                # Temporary encrease ImageFile MAXBLOCK
                ImageFile.MAXBLOCK = image.size[0] * image.size[1]
                image.save(bf, **params)
            except IOError:
                params.pop('optimize')
                image.save(bf, **params)
            finally:
                ImageFile.MAXBLOCK = maxblock

        raw_data = bf.getvalue()
        bf.close()

        return raw_data
Beispiel #5
0
    def _get_raw_data(self, image, format_, quality, progressive=False):
        ImageFile.MAXBLOCK = image.size[0] * image.size[1]
        buffer = BufferIO()

        params = {
            'format': format_,
            'quality': quality,
            'optimize': 1,
        }

        if format_ == 'JPEG' and progressive:
            params['progressive'] = True
        try:
            image.save(buffer, **params)
        except IOError:
            maxblock = ImageFile.MAXBLOCK

            try:
                # Temporary encrease ImageFile MAXBLOCK
                ImageFile.MAXBLOCK = image.size[0] * image.size[1]
                image.save(buffer, **params)
            except IOError:
                params.pop('optimize')
                image.save(buffer, **params)
            finally:
                ImageFile.MAXBLOCK = maxblock

        raw_data = buffer.getvalue()
        buffer.close()

        return raw_data
Beispiel #6
0
    def _get_raw_data(self, image, format_, quality, image_info=None, progressive=False):
        # Increase (but never decrease) PIL buffer size
        ImageFile.MAXBLOCK = max(ImageFile.MAXBLOCK, image.size[0] * image.size[1])
        bf = BufferIO()

        params = {
            'format': format_,
            'quality': quality,
            'optimize': 1,
        }

        params.update(image_info)

        raw_data = None

        if format_ == 'JPEG' and progressive:
            params['progressive'] = True
        try:
            image.save(bf, **params)
        except (IOError, OSError):
            # Try without optimization.
            params.pop('optimize')
            image.save(bf, **params)
        else:
            raw_data = bf.getvalue()
        finally:
            bf.close()

        return raw_data
Beispiel #7
0
    def _get_raw_data(self,
                      image,
                      format_,
                      quality,
                      image_info=None,
                      progressive=False):
        # Increase (but never decrease) PIL buffer size
        ImageFile.MAXBLOCK = max(ImageFile.MAXBLOCK,
                                 image.size[0] * image.size[1])
        bf = BufferIO()

        params = {
            'format': format_,
            'quality': quality,
            'optimize': 1,
        }

        params.update(image_info)

        raw_data = None

        if format_ == 'JPEG' and progressive:
            params['progressive'] = True
        try:
            image.save(bf, **params)
        except (IOError, OSError):
            # Try without optimization.
            params.pop('optimize')
            image.save(bf, **params)
        else:
            raw_data = bf.getvalue()
        finally:
            bf.close()

        return raw_data
Beispiel #8
0
 def is_valid_image(self, raw_data):
     buffer = BufferIO(raw_data)
     try:
         trial_image = Image.open(buffer)
         trial_image.verify()
     except Exception:
         return False
     return True
Beispiel #9
0
 def get_image(self, source):
     buffer = BufferIO(source.read())
     return Image.open(buffer)