diff --git a/product/ERP5/Document/Document.py b/product/ERP5/Document/Document.py index c415693415d96d7e45e580bcab339581b67dfeba..e0db81553445a30bc84fa59a2201486724013e12 100644 --- a/product/ERP5/Document/Document.py +++ b/product/ERP5/Document/Document.py @@ -77,8 +77,8 @@ VALID_IMAGE_FORMAT_LIST = ('jpg', 'jpeg', 'png', 'gif', 'pnm', 'ppm', 'tiff') DEFAULT_DISPLAY_ID_LIST = ('nano', 'micro', 'thumbnail', 'xsmall', 'small', 'medium', 'large', 'large', 'xlarge',) - -DEFAULT_QUALITY = 75 +# default image quality +DEFAULT_IMAGE_QUALITY = 75 DEFAULT_CONTENT_TYPE = 'text/html' diff --git a/product/ERP5/Document/Image.py b/product/ERP5/Document/Image.py index b3edddb27b93717e0b85ac2edc08632b61f2e718..a49c0a58438e47ddbc09f544cf427fa6a5f6332e 100644 --- a/product/ERP5/Document/Image.py +++ b/product/ERP5/Document/Image.py @@ -44,7 +44,7 @@ from Products.ERP5Type import Permissions, PropertySheet from Products.ERP5Type.Utils import fill_args_from_request from Products.ERP5.Document.File import File from Products.ERP5.Document.Document import Document, ConversionError,\ - VALID_TEXT_FORMAT_LIST, DEFAULT_DISPLAY_ID_LIST, DEFAULT_QUALITY, _MARKER + VALID_TEXT_FORMAT_LIST, DEFAULT_DISPLAY_ID_LIST, DEFAULT_IMAGE_QUALITY, _MARKER from os.path import splitext from OFS.Image import Image as OFSImage from OFS.Image import getImageInfo @@ -185,7 +185,7 @@ class Image(TextConvertableMixin, File, OFSImage): security.declareProtected(Permissions.View, 'tag') def tag(self, display=None, height=None, width=None, cookie=0, - alt=None, css_class=None, format=None, quality=DEFAULT_QUALITY, + alt=None, css_class=None, format=None, quality=None, resolution=None, frame=None, **kw): """Return HTML img tag.""" self._upradeImage() @@ -193,7 +193,8 @@ class Image(TextConvertableMixin, File, OFSImage): # Get cookie if display is not specified. if display is None: display = self.REQUEST.cookies.get('display', None) - + if quality is None: + quality = self.getDefaultImageQuality(format) # display may be set from a cookie. image_size = self.getSizeFromImageDisplay(display) convert_kw = dict(format=format, quality=quality, resolution=resolution, @@ -268,10 +269,12 @@ class Image(TextConvertableMixin, File, OFSImage): return links security.declareProtected(Permissions.AccessContentsInformation, 'displayMap') - def displayMap(self, exclude=None, format=None, quality=DEFAULT_QUALITY,\ + def displayMap(self, exclude=None, format=None, quality=None,\ resolution=None): """Return list of displays with size info.""" displays = [] + if quality is None: + quality = self.getDefaultImageQuality(format) for id in self.displayIds(exclude): if self._isGenerated(id, format=format, quality=quality,\ resolution=resolution): @@ -331,7 +334,7 @@ class Image(TextConvertableMixin, File, OFSImage): image_size = self.getSizeFromImageDisplay(kw.get('display')) # store all keys usefull to convert or resize an image # 'display' parameter can be discarded - convert_kw = {'quality': kw.get('quality', DEFAULT_QUALITY), + convert_kw = {'quality': kw.get('quality', self.getDefaultImageQuality(format)), 'resolution': kw.get('resolution'), 'frame': kw.get('frame'), 'image_size': image_size, @@ -406,15 +409,17 @@ class Image(TextConvertableMixin, File, OFSImage): """Return raw photo data for given display.""" width, height = self._getAspectRatioSize(*image_size) if ((width, height) == image_size or (width, height) == (0, 0))\ - and quality == DEFAULT_QUALITY and resolution is None and frame is None\ + and quality == self.getDefaultImageQuality(format) and resolution is None and frame is None\ and not format: # No resizing, no conversion, return raw image return self.getData() return self._resize(quality, width, height, format, resolution, frame) - def _makeDisplayPhoto(self, format=None, quality=DEFAULT_QUALITY, + def _makeDisplayPhoto(self, format=None, quality=None, resolution=None, frame=None, image_size=None): """Create given display.""" + if quality is None: + quality = self.getDefaultImageQuality(format) width, height = image_size base, ext = splitext(self.id) id = '%s_%s_%s.%s'% (base, width, height, ext,) @@ -470,3 +475,11 @@ class Image(TextConvertableMixin, File, OFSImage): """ File.PUT(self, REQUEST, RESPONSE) self._update_image_info() + + def getDefaultImageQuality(self, format=None): + """ + Get default image quality for a format. + """ + preference_tool = self.getPortalObject().portal_preferences + quality = preference_tool.getPreference('preferred_image_quality', DEFAULT_IMAGE_QUALITY) + return quality