Mercurial > hg > MPIWGWeb
changeset 127:4a8a532a05ba
scale images
author | dwinter |
---|---|
date | Thu, 30 May 2013 20:55:07 +0200 |
parents | 220f37701e8d |
children | 11b7f98c7ed1 |
files | MPIWGProjects.py MPIWGRoot.py |
diffstat | 2 files changed, 138 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/MPIWGProjects.py Thu May 30 09:01:14 2013 +0200 +++ b/MPIWGProjects.py Thu May 30 20:55:07 2013 +0200 @@ -711,6 +711,129 @@ return sorted(items, key=lambda x:int(getattr(x, 'place', 0))) + + def scaleImage(self,REQUEST=None,RESPONSE=None): + """scale the last image""" + from PIL import Image; + from cStringIO import StringIO; + import ImageFilter + + + + + images = self.getImageList(); + if len(images)>0: + img = images[-1] #nimmt das letze + + logging.debug(img) + datStringIO = StringIO(); + """ + data=img.data + if isinstance(data, str): + datStringIO.write(data) + else: + + while data is not None: + datStringIO.write(data.data) + data=data.next + + """ + + logging.debug(img.absolute_url()) + + url = img.absolute_url() + if not url.startswith("http"): + url=REQUEST['URL0']+url + ul = urllib.urlopen(url) + datStringIO = StringIO(ul.read()); + + + try: + pilImg = Image.open(datStringIO) + + + except: + logging.error("scale image input:"+self.getId()) + return + + w,h = pilImg.size + logging.debug("oldsize: %s %s"%(w,h)) + targetW=120. + targetH=75. + + if targetW == w and targetH == h: + return + facW=targetW/w + + h1 = int(h*facW) + + if h1<targetH: #bild zu klein in h + facH=targetH/h + + w1=int(w*facH) + + fs = min(max(int(1/facH)+1,3),10) + logging.debug(fs) + if (1/facH) > 2: + pilImg = pilImg.filter(ImageFilter.BLUR) + + try: + pilImg = pilImg.filter(ImageFilter.MaxFilter(fs)) + except: + pilImg = pilImg.filter(ImageFilter.MaxFilter(fs-1)) + + logging.debug("Xnew size: %s %s"%(w1,targetH)) + res = pilImg.resize((w1,int(targetH)),Image.ANTIALIAS); + + + else: + fs = min(max(int(1/facW)+1,3),10) + logging.debug(fs) + + if (1/facW) > 2: + try: + pilImg = pilImg.filter(ImageFilter.BLUR) + except: + pass #some image types cannot be filter, just ignore + + try: + pilImg = pilImg.filter(ImageFilter.MaxFilter(fs)) + except: + + + try: + pilImg = pilImg.filter(ImageFilter.MaxFilter(fs-1)) + except: + pass + logging.debug("ynew size: %s %s"%(targetW,h1)) + res = pilImg.resize((int(targetW),h1)) + + nw,nh = res.size + + cutW1=int(nw/2-(targetW/2)) + cutW2=int(nw/2+(targetW/2)) + + cutH1=int(nh/2-(targetH/2)) + cutH2=int(nh/2+(targetH/2)) + + + + res2 = res.crop((cutW1,cutH1,cutW2,cutH2)) + + outS = StringIO() + + #res2.save("/tmp/"+self.getId()+".jpg") + + try: + res2.save(outS,"JPEG") + + self.addImage(outS, None, RESPONSE, filename="thumb.jpg") + + except: + logging.error("scale image:"+self.getId()) + + + def addImage(self, fileHd, caption, RESPONSE=None, filename=None): """add an MPIWG_Project_image""" @@ -724,7 +847,11 @@ self._setObject(filename, newImage) obj = getattr(self, filename) - obj.caption = caption[:] + if caption is None: + obj.caption=None + else: + obj.caption = caption[:] + obj.enabled = True; obj.place = self._getLastImageNumber() + 1 obj.id = filename @@ -2068,7 +2195,14 @@ RESPONSE.flush() else: return fulllog - + + def scaleImages(self,REQUEST=None): + """scaleImages""" + prjs = self.getProjectsAsList() + for prj in prjs: + prj.scaleImage(REQUEST=REQUEST) + logging.debug(prj.getId()) + def manage_addMPIWGProjectFolderForm(self): """form for adding a MPIWGProjectFolder"""