comparison MPIWGProjects.py @ 169:2da62e93a1c6

fix editing related projects.
author casties
date Fri, 07 Jun 2013 12:47:11 +0200
parents 47392bf3fcba
children 9d8f202e3895
comparison
equal deleted inserted replaced
168:07beb979e7e4 169:2da62e93a1c6
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 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
837 def addImage(self, fileHd, caption, RESPONSE=None, filename=None): 715 def addImage(self, fileHd, caption, RESPONSE=None, filename=None):
838 """add an MPIWG_Project_image""" 716 """add an MPIWG_Project_image"""
839 717
840 if not filename: 718 if not filename:
841 filename = fileHd.filename 719 filename = fileHd.filename
1807 1685
1808 if RESPONSE: 1686 if RESPONSE:
1809 self.redirect(RESPONSE, 'manageImages') 1687 self.redirect(RESPONSE, 'manageImages')
1810 1688
1811 1689
1690 def scaleImage(self,REQUEST=None,RESPONSE=None):
1691 """scale the last image"""
1692 from PIL import Image;
1693 from cStringIO import StringIO;
1694 import ImageFilter
1695
1696 images = self.getImageList();
1697 if len(images)>0:
1698 img = images[-1] #nimmt das letze
1699
1700 logging.debug(img)
1701 datStringIO = StringIO();
1702 """
1703 data=img.data
1704 if isinstance(data, str):
1705 datStringIO.write(data)
1706 else:
1707
1708 while data is not None:
1709 datStringIO.write(data.data)
1710 data=data.next
1711
1712 """
1713
1714 logging.debug(img.absolute_url())
1715
1716 url = img.absolute_url()
1717 if not url.startswith("http"):
1718 url=REQUEST['URL0']+url
1719 ul = urllib.urlopen(url)
1720 datStringIO = StringIO(ul.read());
1721
1722
1723 try:
1724 pilImg = Image.open(datStringIO)
1725
1726
1727 except:
1728 logging.error("scale image input:"+self.getId())
1729 return
1730
1731 w,h = pilImg.size
1732 logging.debug("oldsize: %s %s"%(w,h))
1733 targetW=120.
1734 targetH=75.
1735
1736 if targetW == w and targetH == h:
1737 return
1738 facW=targetW/w
1739
1740 h1 = int(h*facW)
1741
1742 if h1<targetH: #bild zu klein in h
1743 facH=targetH/h
1744
1745 w1=int(w*facH)
1746
1747 fs = min(max(int(1/facH)+1,3),10)
1748 logging.debug(fs)
1749 if (1/facH) > 2:
1750 pilImg = pilImg.filter(ImageFilter.BLUR)
1751
1752 try:
1753 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs))
1754 except:
1755 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs-1))
1756
1757 logging.debug("Xnew size: %s %s"%(w1,targetH))
1758 res = pilImg.resize((w1,int(targetH)),Image.ANTIALIAS);
1759
1760
1761 else:
1762 fs = min(max(int(1/facW)+1,3),10)
1763 logging.debug(fs)
1764
1765 if (1/facW) > 2:
1766 try:
1767 pilImg = pilImg.filter(ImageFilter.BLUR)
1768 except:
1769 pass #some image types cannot be filter, just ignore
1770
1771 try:
1772 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs))
1773 except:
1774
1775
1776 try:
1777 pilImg = pilImg.filter(ImageFilter.MaxFilter(fs-1))
1778 except:
1779 pass
1780 logging.debug("ynew size: %s %s"%(targetW,h1))
1781 res = pilImg.resize((int(targetW),h1))
1782
1783 nw,nh = res.size
1784
1785 cutW1=int(nw/2-(targetW/2))
1786 cutW2=int(nw/2+(targetW/2))
1787
1788 cutH1=int(nh/2-(targetH/2))
1789 cutH2=int(nh/2+(targetH/2))
1790
1791 res2 = res.crop((cutW1,cutH1,cutW2,cutH2))
1792
1793 outS = StringIO()
1794
1795 #res2.save("/tmp/"+self.getId()+".jpg")
1796
1797 try:
1798 res2.save(outS,"JPEG")
1799
1800 self.addImage(outS, None, RESPONSE, filename="thumb.jpg")
1801
1802 except:
1803 logging.error("scale image:"+self.getId())
1804
1805
1812 def updateProjectMembers(self, updateResponsibleScientistsList=False): 1806 def updateProjectMembers(self, updateResponsibleScientistsList=False):
1813 """Update project-member table.""" 1807 """Update project-member table."""
1814 # projects are identified by id 1808 # projects are identified by id
1815 pid = self.getId() 1809 pid = self.getId()
1816 1810