comparison MPIWGProjects.py @ 127:4a8a532a05ba

scale images
author dwinter
date Thu, 30 May 2013 20:55:07 +0200
parents 220f37701e8d
children a9ad7dd7a8b2
comparison
equal deleted inserted replaced
123:220f37701e8d 127:4a8a532a05ba
709 items = self.objectValues(spec='MPIWGProject_image') 709 items = self.objectValues(spec='MPIWGProject_image')
710 # sort by place 710 # sort by place
711 return sorted(items, key=lambda x:int(getattr(x, 'place', 0))) 711 return sorted(items, key=lambda x:int(getattr(x, 'place', 0)))
712 712
713 713
714
715 def scaleImage(self,REQUEST=None,RESPONSE=None):
716 """scale the last image"""
717 from PIL import Image;
718 from cStringIO import StringIO;
719 import ImageFilter
720
721
722
723
724 images = self.getImageList();
725 if len(images)>0:
726 img = images[-1] #nimmt das letze
727
728 logging.debug(img)
729 datStringIO = StringIO();
730 """
731 data=img.data
732 if isinstance(data, str):
733 datStringIO.write(data)
734 else:
735
736 while data is not None:
737 datStringIO.write(data.data)
738 data=data.next
739
740 """
741
742 logging.debug(img.absolute_url())
743
744 url = img.absolute_url()
745 if not url.startswith("http"):
746 url=REQUEST['URL0']+url
747 ul = urllib.urlopen(url)
748 datStringIO = StringIO(ul.read());
749
750
751 try:
752 pilImg = Image.open(datStringIO)
753
754
755 except:
756 logging.error("scale image input:"+self.getId())
757 return
758
759 w,h = pilImg.size
760 logging.debug("oldsize: %s %s"%(w,h))
761 targetW=120.
762 targetH=75.
763
764 if targetW == w and targetH == h:
765 return
766 facW=targetW/w
767
768 h1 = int(h*facW)
769
770 if h1<targetH: #bild zu klein in h
771 facH=targetH/h
772
773 w1=int(w*facH)
774
775 fs = min(max(int(1/facH)+1,3),10)
776 logging.debug(fs)
777 if (1/facH) > 2:
778 pilImg = pilImg.filter(ImageFilter.BLUR)
779
780 try:
781 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs))
782 except:
783 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs-1))
784
785 logging.debug("Xnew size: %s %s"%(w1,targetH))
786 res = pilImg.resize((w1,int(targetH)),Image.ANTIALIAS);
787
788
789 else:
790 fs = min(max(int(1/facW)+1,3),10)
791 logging.debug(fs)
792
793 if (1/facW) > 2:
794 try:
795 pilImg = pilImg.filter(ImageFilter.BLUR)
796 except:
797 pass #some image types cannot be filter, just ignore
798
799 try:
800 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs))
801 except:
802
803
804 try:
805 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs-1))
806 except:
807 pass
808 logging.debug("ynew size: %s %s"%(targetW,h1))
809 res = pilImg.resize((int(targetW),h1))
810
811 nw,nh = res.size
812
813 cutW1=int(nw/2-(targetW/2))
814 cutW2=int(nw/2+(targetW/2))
815
816 cutH1=int(nh/2-(targetH/2))
817 cutH2=int(nh/2+(targetH/2))
818
819
820
821 res2 = res.crop((cutW1,cutH1,cutW2,cutH2))
822
823 outS = StringIO()
824
825 #res2.save("/tmp/"+self.getId()+".jpg")
826
827 try:
828 res2.save(outS,"JPEG")
829
830 self.addImage(outS, None, RESPONSE, filename="thumb.jpg")
831
832 except:
833 logging.error("scale image:"+self.getId())
834
835
836
714 def addImage(self, fileHd, caption, RESPONSE=None, filename=None): 837 def addImage(self, fileHd, caption, RESPONSE=None, filename=None):
715 """add an MPIWG_Project_image""" 838 """add an MPIWG_Project_image"""
716 839
717 if not filename: 840 if not filename:
718 filename = fileHd.filename 841 filename = fileHd.filename
722 845
723 newImage = MPIWGProject_image(filename, filename, fileHd) 846 newImage = MPIWGProject_image(filename, filename, fileHd)
724 847
725 self._setObject(filename, newImage) 848 self._setObject(filename, newImage)
726 obj = getattr(self, filename) 849 obj = getattr(self, filename)
727 obj.caption = caption[:] 850 if caption is None:
851 obj.caption=None
852 else:
853 obj.caption = caption[:]
854
728 obj.enabled = True; 855 obj.enabled = True;
729 obj.place = self._getLastImageNumber() + 1 856 obj.place = self._getLastImageNumber() + 1
730 obj.id = filename 857 obj.id = filename
731 858
732 # invalidate thumbnail 859 # invalidate thumbnail
2066 if RESPONSE is not None: 2193 if RESPONSE is not None:
2067 RESPONSE.write(log) 2194 RESPONSE.write(log)
2068 RESPONSE.flush() 2195 RESPONSE.flush()
2069 else: 2196 else:
2070 return fulllog 2197 return fulllog
2071 2198
2199 def scaleImages(self,REQUEST=None):
2200 """scaleImages"""
2201 prjs = self.getProjectsAsList()
2202 for prj in prjs:
2203 prj.scaleImage(REQUEST=REQUEST)
2204 logging.debug(prj.getId())
2205
2072 2206
2073 def manage_addMPIWGProjectFolderForm(self): 2207 def manage_addMPIWGProjectFolderForm(self):
2074 """form for adding a MPIWGProjectFolder""" 2208 """form for adding a MPIWGProjectFolder"""
2075 pt = PageTemplateFile('zpt/project/manage_add_MPIWGProjectFolder', globals()).__of__(self) 2209 pt = PageTemplateFile('zpt/project/manage_add_MPIWGProjectFolder', globals()).__of__(self)
2076 return pt() 2210 return pt()