[Checkins] SVN: z3c.image/trunk/src/z3c/image/proc/adapter.py
handle files better to prevent bus errors (hopefully)
Bernd Dorn
bernd.dorn at fhv.at
Wed Aug 30 13:37:41 EDT 2006
Log message for revision 69895:
handle files better to prevent bus errors (hopefully)
Changed:
U z3c.image/trunk/src/z3c/image/proc/adapter.py
-=-
Modified: z3c.image/trunk/src/z3c/image/proc/adapter.py
===================================================================
--- z3c.image/trunk/src/z3c/image/proc/adapter.py 2006-08-30 16:28:47 UTC (rev 69894)
+++ z3c.image/trunk/src/z3c/image/proc/adapter.py 2006-08-30 17:37:40 UTC (rev 69895)
@@ -22,25 +22,37 @@
self.format = image.contentType.split('/')[1]
self.cmds = []
- @readproperty
- def pimg(self):
+ def getPILImg(self):
data = self.context.data
# only make it a buffer if we need to, so we can handle
# efficient files, like from z3c.extfile
+ p = ImageFile.Parser()
if type(data)==StringType:
- data = StringIO(data)
- return PILImage.open(data)
+ p.feed(data)
+ else:
+ data.seek(0)
+ while 1:
+ s = data.read(1024)
+ if not s:
+ try:
+ data.close()
+ except:
+ pass
+ break
+ p.feed(s)
+ return p.close()
- def _toImage(self,*args,**kw):
+ def _toImage(self, pimg, *args,**kw):
"""returns an Image object from the given PIL image"""
data = StringIO()
try:
- self.pimg.save(data,self.format,*args,**kw)
+ pimg.save(data,self.format,*args,**kw)
except IOError:
# retry without optimization
kw.pop('optimize')
- self.pimg.save(data,self.format,*args,**kw)
- return Image(data.getvalue())
+ pimg.save(data,self.format,*args,**kw)
+ data.seek(0)
+ return Image(data)
def rotate(self, degrees):
self.cmds.append(('rotate',[degrees],{}))
@@ -59,12 +71,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(self.pimg,name)
- self.pimg = func(*args,**kwords)
- return self._toImage(quality=quality,optimize=optimize)
+ func = getattr(pimg,name)
+ pimg = func(*args,**kwords)
+ return self._toImage(pimg, quality=quality,optimize=optimize)
-
-
+
+
+
More information about the Checkins
mailing list