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"""
--- a/MPIWGRoot.py	Thu May 30 09:01:14 2013 +0200
+++ b/MPIWGRoot.py	Thu May 30 20:55:07 2013 +0200
@@ -519,6 +519,8 @@
                     fw.flush()
                 
             fw.close()
+            
+    
     
 
 def manage_addMPIWGRootForm(self):