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

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()
