add fill option to media asset resize function

This commit is contained in:
hplattner 2015-09-29 11:42:42 +02:00
parent 81d17e8966
commit e5a09ed436
2 changed files with 17 additions and 8 deletions

View file

@ -29,11 +29,9 @@ from logging import getLogger
import mimetypes
import os, re, sys
from zope import component
from zope.interface import implements
from cybertools.media.interfaces import IMediaAsset, IFileTransform
from cybertools.media.interfaces import IMediaAsset
from cybertools.media.piltransform import PILTransform
from cybertools.storage.filesystem import FileSystemStorage
TRANSFORM_STATEMENT = re.compile(r"\s*(\+?)([\w]+[\w\d]*)\(([^\)]*)\)\s*")
@ -41,14 +39,17 @@ DEFAULT_FORMATS = {
"image": "image/jpeg"
}
def parseTransformStatements(txStr):
""" Parse statements in transform chain strings."""
statements = TRANSFORM_STATEMENT.findall(txStr)
return statements
def getMimeBasetype(mimetype):
return mimetype.split("/", 1)[0]
def getMimetypeExt(mimetype):
exts = mimetypes.guess_all_extensions(mimetype)
return exts and exts[-1] or ""

View file

@ -93,7 +93,7 @@ class PILTransform(object):
box = (left, upper, right, lower)
self.im = self.im.crop(box)
def resize(self, width, height=None):
def resize(self, width, height=None, fill=False):
if self.im is None:
return
if not height:
@ -101,7 +101,15 @@ class PILTransform(object):
ratio = float(ow) / float(oh)
height = int(round(float(width) / ratio))
dims = (width, height)
self.im.thumbnail(dims, Image.ANTIALIAS)
if fill:
image = self.im
image.thumbnail(dims, Image.ANTIALIAS)
new = Image.new('RGBA', dims, (255, 255, 255, 0)) #with alpha
new.paste(image,((dims[0] - image.size[0]) / 2,
(dims[1] - image.size[1]) / 2))
self.im = new
return new
return self.im.thumbnail(dims, Image.ANTIALIAS)
def save(self, path, mimetype):
if self.im is None: