From e5a09ed436d311e6b4f598c133a2e1967719cef0 Mon Sep 17 00:00:00 2001 From: hplattner Date: Tue, 29 Sep 2015 11:42:42 +0200 Subject: [PATCH 1/2] add fill option to media asset resize function --- media/asset.py | 13 +++++++------ media/piltransform.py | 12 ++++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/media/asset.py b/media/asset.py index ed3e3db..5af5514 100644 --- a/media/asset.py +++ b/media/asset.py @@ -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,13 +39,16 @@ 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] + return mimetype.split("/", 1)[0] + def getMimetypeExt(mimetype): exts = mimetypes.guess_all_extensions(mimetype) @@ -74,9 +75,9 @@ class MediaAssetFile(object): getLogger('cybertools.media.asset.MediaAssetFile').warn( 'Media asset directory %r not found.' % path) self.transform() - #return self.getOriginalData() + # return self.getOriginalData() f = open(path, 'rb') - data =f.read() + data = f.read() f.close() return data diff --git a/media/piltransform.py b/media/piltransform.py index a040103..fa0dd40 100644 --- a/media/piltransform.py +++ b/media/piltransform.py @@ -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: From 917c2ae579ce079e2f38f98f7df4b8009b684919 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 10 Oct 2015 11:27:41 +0200 Subject: [PATCH 2/2] revert change by hplattner from 2013 that was erroneously merged --- composer/schema/instance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer/schema/instance.py b/composer/schema/instance.py index f95cc62..11d2718 100644 --- a/composer/schema/instance.py +++ b/composer/schema/instance.py @@ -53,7 +53,7 @@ class Instance(BaseInstance): fi = f.getFieldInstance(self, context=kw.get('context'), request=kw.get('request')) name = f.name - value = getattr(self.context, name, fi.default) + value = getattr(self.context, name) or fi.default if mode in ('view', 'preview'): value = fi.display(value) else: