from Products.PortalTransforms.interfaces import ITransform
from zope.interface import implements
from StringIO import StringIO
import PIL.Image


class PILTransforms:
    implements(ITransform)
    __name__ = "piltransforms"

    def __init__(self, name=None):
        if name is not None:
            self.__name__ = name

    def name(self):
        return self.__name__

    def convert(self, orig, data, **kwargs):
        imgio = StringIO()
        orig = StringIO(orig)
        newwidth = kwargs.get('width', None)
        newheight = kwargs.get('height', None)
        pil_img = PIL.Image.open(orig)
        if(self.format in ['jpeg', 'ppm']):
            pil_img.draft("RGB", pil_img.size)
            pil_img = pil_img.convert("RGB")
        if(newwidth or newheight):
            pil_img.thumbnail((newwidth, newheight), PIL.Image.ANTIALIAS)
        pil_img.save(imgio, self.format)
        data.setData(imgio. getvalue())
        return data


def register():
    return PILTransforms()
