[Checkins] SVN: z3c.image/trunk/src/z3c/image/ use a none
persistent image implementation to return from processor
Bernd Dorn
bernd.dorn at fhv.at
Thu Aug 31 03:31:45 EDT 2006
Log message for revision 69897:
use a none persistent image implementation to return from processor
Changed:
A z3c.image/trunk/src/z3c/image/image.py
U z3c.image/trunk/src/z3c/image/proc/README.txt
U z3c.image/trunk/src/z3c/image/proc/adapter.py
-=-
Added: z3c.image/trunk/src/z3c/image/image.py
===================================================================
--- z3c.image/trunk/src/z3c/image/image.py 2006-08-30 21:51:25 UTC (rev 69896)
+++ z3c.image/trunk/src/z3c/image/image.py 2006-08-31 07:31:43 UTC (rev 69897)
@@ -0,0 +1,36 @@
+from zope.app.file import Image
+from zope.app.file.interfaces import IImage
+import os
+import stat
+from zope import interface
+import tempfile
+
+class VImage(object):
+
+ """a non persistent image implementation"""
+
+ interface.implements(IImage)
+
+ def __init__(self, contentType='', size=(0, 0)):
+ self.data = tempfile.TemporaryFile(prefix='z3c.vimage')
+ self.contentType = contentType
+ self.size = size
+
+ def getSize(self):
+ try:
+ return len(self.data)
+ except TypeError:
+ data = self.data
+ if hasattr(data, 'fileno'):
+ return int(os.fstat(data.fileno())[stat.ST_SIZE])
+ pos = self.data.tell()
+ size = len(data.read())
+ data.seek(pos)
+ return size
+
+ def getImageSize(self):
+ return self.size
+
+
+
+
Property changes on: z3c.image/trunk/src/z3c/image/image.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: z3c.image/trunk/src/z3c/image/proc/README.txt
===================================================================
--- z3c.image/trunk/src/z3c/image/proc/README.txt 2006-08-30 21:51:25 UTC (rev 69896)
+++ z3c.image/trunk/src/z3c/image/proc/README.txt 2006-08-31 07:31:43 UTC (rev 69897)
@@ -26,7 +26,7 @@
>>> res = pimg.process()
>>> res
- <zope.app.file.image.Image object at ...>
+ <z3c.image.image.VImage object at ...>
>>> res.getImageSize()
(118, 103)
Modified: z3c.image/trunk/src/z3c/image/proc/adapter.py
===================================================================
--- z3c.image/trunk/src/z3c/image/proc/adapter.py 2006-08-30 21:51:25 UTC (rev 69896)
+++ z3c.image/trunk/src/z3c/image/proc/adapter.py 2006-08-31 07:31:43 UTC (rev 69897)
@@ -1,6 +1,7 @@
from zope.interface import implements
from zope import component
from zope.app.file import Image
+from z3c.image.image import VImage
from zope.app.file.interfaces import IFile
from zope.cachedescriptors.property import readproperty
from PIL import Image as PILImage
@@ -11,6 +12,8 @@
# see http://mail.python.org/pipermail/image-sig/2003-May/002228.html
ImageFile.MAXBLOCK = 1024*1024
+import thread
+lock = thread.allocate_lock()
class ProcessableImage(object):
@@ -44,15 +47,16 @@
def _toImage(self, pimg, *args,**kw):
"""returns an Image object from the given PIL image"""
- data = StringIO()
+ img = VImage(contentType=self.context.contentType,
+ size=pimg.size)
try:
- pimg.save(data,self.format,*args,**kw)
+ pimg.save(img.data,self.format,*args,**kw)
except IOError:
# retry without optimization
kw.pop('optimize')
- pimg.save(data,self.format,*args,**kw)
- data.seek(0)
- return Image(data)
+ pimg.save(img.data,self.format,*args,**kw)
+ img.data.seek(0)
+ return img
def rotate(self, degrees):
self.cmds.append(('rotate',[degrees],{}))
@@ -71,14 +75,15 @@
def process(self,quality=90,optimize=1):
"""processes the command queue and returns the image"""
-
if not self.cmds:
return self.context
pimg = self.getPILImg()
for name,args,kwords in self.cmds:
func = getattr(pimg,name)
pimg = func(*args,**kwords)
- return self._toImage(pimg, quality=quality,optimize=optimize)
+ img = self._toImage(pimg, quality=quality,optimize=optimize)
+ return img
+
More information about the Checkins
mailing list