[原]动态注册点显示对象 AS3实现---Proxy方法

2008-8-26 23:59:33 原创 抢沙发(0)

由于之前的

动态注册点显示对象 AS3实现

不太适合多类型的显示对象DisplayObject复合应用,因此实际应用过程中采用了Proxy模式,这样
只要注册时使用对应的显示对象即可。
 
PS: 由于Blog限制,示例不能再摘要中显示,故请点击文章内部看玩具吧.....
 
示例:
操作:单击确定旋转/缩放点,按下并拖动鼠标则实现以旋转,鼠标滚轮则缩放对应的点。
 

源码:
 

  1. package  com.xintend.util {  
  2.     import flash.display.DisplayObject;  
  3.     import flash.display.Sprite;  
  4.     import flash.geom.Point;  
  5.     import flash.utils.Proxy;  
  6.     import flash.utils.flash_proxy;  
  7.  
  8.       
  9.     /**  
  10.     * [AS3]DynamicRegistrationProxy  
  11.     * 动态注册点代理   引用请保留此处信息及参考信息  
  12.     * @author telds[kingfo] www.xintend.com   
  13.     *   
  14.     *   
  15.     * 一级参考:  
  16.     *   作者: Darronschall        [ActionScript 2]  
  17.     *   站点: http://www.darronschall.com/weblog/archives/000054.cfm  
  18.     *   
  19.     * 二级参考:  
  20.     *   作者:     Robert Penner       [ActionScript 1]  
  21.     *   站点: www.robertpenner.com      
  22.     *   
  23.     */ 
  24.     public dynamic class DynamicRegistrationProxy extends Proxy {         
  25.           
  26.         public function DynamicRegistrationProxy(source:DisplayObject=null):void {  
  27.             _displayObject = source || new Sprite();  
  28.         }  
  29.           
  30.         override flash_proxy function callProperty(methodName:*, ... args):*  {  
  31.             var res:*;  
  32.             var a:Point;  
  33.             var b:Point;  
  34.             var method:String = methodName.toString();  
  35.             var property:String;  
  36.             switch (method) {  
  37.                 case 'setRegistrationByStage':  
  38.                     a = _displayObject.globalToLocal(new Point(args[0], args[1]));                    
  39.                     _stageRegX = args[0];  
  40.                     _stageRegY = args[1];         
  41.                     _regX = a.x;  
  42.                     _regY = a.y;  
  43.                 break;  
  44.                 case 'setRegistrationBySelf':  
  45.                     a = _displayObject.localToGlobal(new Point(args[0], args[1]));                    
  46.                     _regX = args[0];  
  47.                     _regY = args[1];          
  48.                     _stageRegX = a.x;  
  49.                     _stageRegY = a.y;  
  50.                 break;  
  51.                 case 'setPropRel':  
  52.                     a = _displayObject.parent.globalToLocal(_displayObject.localToGlobal(new Point(_regX, _regY)));  
  53.                     property = args[0].toString();  
  54.                     _displayObject[property] = args[1];           
  55.                     b = _displayObject.parent.globalToLocal(_displayObject.localToGlobal(new Point(_regX, _regY)));       
  56.                     _displayObject.x -= b.x - a.x;  
  57.                     _displayObject.y -= b.y - a.y;  
  58.                 break;                
  59.                 default:  
  60.                     res = _displayObject[method].apply(_displayObject, args);  
  61.                 break;  
  62.             }  
  63.             return res;  
  64.         }  
  65.           
  66.         override flash_proxy function getProperty(name:*):* {  
  67.             var res:*;  
  68.             var property:String = name.toString();  
  69.             switch (property) {  
  70.                 case 'regX':  
  71.                     res = _regX;  
  72.                 break;  
  73.                 case 'regY':  
  74.                     res = _regY;  
  75.                 break;  
  76.                 case 'stageRegX':  
  77.                     res = _stageRegX;  
  78.                 break;  
  79.                 case 'stageRegY':  
  80.                     res = _stageRegY;  
  81.                 break;  
  82.                 case 'x2':  
  83.                     res = _x2;  
  84.                 break;  
  85.                 case 'y2':  
  86.                     res = _y2;  
  87.                 break;  
  88.                 case 'scaleX2':  
  89.                     res = _displayObject.scaleX;  
  90.                 break;  
  91.                 case 'scaleY2':  
  92.                     res = _displayObject.scaleY;  
  93.                 break;  
  94.                 case 'rotation2':  
  95.                     res = _displayObject.rotation  
  96.                 break;  
  97.                 case 'source':  
  98.                     res = _displayObject;  
  99.                 break;  
  100.                 default:  
  101.                     res = _displayObject[property];  
  102.                 break;  
  103.             }  
  104.             return res;  
  105.         }  
  106.  
  107.         override flash_proxy function setProperty(name:*, value:*):void {  
  108.             var property:String = name.toString();            
  109.             switch (property) {  
  110.                 case 'regX':  
  111.                     _regX = value;  
  112.                 break;  
  113.                 case 'regY':  
  114.                     _regY = value;  
  115.                 break;  
  116.                 case 'stageRegX':  
  117.                     _stageRegX = value;  
  118.                 break;  
  119.                 case 'stageRegY':  
  120.                     _stageRegY = value;  
  121.                 break;  
  122.                 case 'x2':  
  123.                     _x2 += value - _displayObject.x;  
  124.                 break;  
  125.                 case 'y2':  
  126.                     _y2 += value - _displayObject.y;  
  127.                 break;  
  128.                 case 'scaleX2':  
  129.                     flash_proxy::callProperty('setPropRel',"scaleX", value);  
  130.                 break;  
  131.                 case 'scaleY2':  
  132.                     flash_proxy::callProperty('setPropRel',"scaleY", value);  
  133.                 break;  
  134.                 case 'rotation2':  
  135.                     flash_proxy::callProperty('setPropRel',"rotation", value);  
  136.                 break;  
  137.                 default:  
  138.                     _displayObject[property] = value;  
  139.                     break;  
  140.             }  
  141.         }  
  142.  
  143.           
  144.           
  145.         private var  _displayObject:DisplayObject;  
  146.         private var _regX:Number = 0;  
  147.         private var _regY:Number = 0;  
  148.         private var _stageRegX:Number = 0;  
  149.         private var _stageRegY:Number = 0;  
  150.         private var _x2:Number = 0;  
  151.         private var _y2:Number = 0;  
  152.     }  
  153.       

示例源码:
 

  1. package {  
  2.       
  3.     import com.xintend.util.DynamicRegistrationProxy;  
  4.     import flash.display.Bitmap;  
  5.     import flash.display.Sprite;  
  6.     import flash.events.MouseEvent;  
  7.     import flash.geom.Point;  
  8.       
  9.     public class Main extends Sprite    {  
  10.           
  11.         private var a:DynamicRegistrationProxy;  
  12.         private var t:Sprite = new Sprite();  
  13.         private var c:CrossHairs = new CrossHairs();  
  14.         [Embed(source = '../bin/123.jpg')]private var imge:Class;  
  15.         private var b:Bitmap  
  16.         public function Main():void {  
  17.               
  18.             b=new imge() as Bitmap  
  19.               
  20.             //t.graphics.beginFill(0xFF0000);  
  21.             //t.graphics.drawRect(0, 0, 80, 40);  
  22.             //t.graphics.endFill();  
  23.               
  24.             //t.buttonMode = true;  
  25.             //t.useHandCursor = true;  
  26.               
  27.             t.addChild(b);  
  28.             c.x = t.x = stage.stageWidth / 2- t.width/2;  
  29.             c.y = t.y = stage.stageHeight / 2 - t.height/2;  
  30.               
  31.               
  32.             t.addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  33.             t.addEventListener(MouseEvent.MOUSE_OUT, handleMOUSE);  
  34.             t.addEventListener(MouseEvent.MOUSE_WHEEL, handleMOUSE);  
  35.               
  36.             a = new DynamicRegistrationProxy(t);  
  37.               
  38.             addChild(t);  
  39.             addChild(c);  
  40.         }  
  41.           
  42.         private  function handleMOUSE(event:MouseEvent):void {  
  43.             switch(event.type) {  
  44.                 case MouseEvent.MOUSE_DOWN:  
  45.                     a.setRegistrationByStage(mouseX, mouseY);  
  46.                     //trace(t.globalToLocal(new Point(mouseX,0)).x,t.globalToLocal(new Point(0,mouseY)).y);  
  47.                     c.x = mouseX;  
  48.                     c.y = mouseY;  
  49.                     removeEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  50.                     addEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);  
  51.                     addEventListener(MouseEvent.MOUSE_UP, handleMOUSE);  
  52.                 break;  
  53.                 case MouseEvent.MOUSE_MOVE:  
  54.                     //trace(t.mouseX - a.regX, t.mouseY - a.regY);  
  55.                     a.rotation2 += 5;  
  56.                     //a.scaleXByRefer += 5;  
  57.                 break;  
  58.                 case MouseEvent.MOUSE_UP:     
  59.                     addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  60.                     removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);  
  61.                 break;  
  62.                 case MouseEvent.MOUSE_WHEEL:      
  63.                     removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);  
  64.                     c.x = mouseX;  
  65.                     c.y = mouseY  
  66.                     a.setRegistrationByStage(mouseX, mouseY);  
  67.                     a.scaleX2 += event.delta * 0.1;  
  68.                     a.scaleY2 += event.delta * 0.1;  
  69.                 break;  
  70.                 default:  
  71.                     addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  72.                     removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);  
  73.             }  
  74.         }  
  75.     }  
  76. }  
  77. import flash.display.Shape;  
  78.  
  79. class CrossHairs extends Shape {  
  80.     public function CrossHairs() {  
  81.         graphics.lineStyle(2,0xFF0000);  
  82.         graphics.moveTo( -10, 0);  
  83.         graphics.lineTo( 10, 0);  
  84.         graphics.moveTo( 0, -10);  
  85.         graphics.lineTo( 0, 10);  
  86.     }  

 

[原]动态注册点显示对象 AS3实现

2008-8-25 14:16:23 原创 抢沙发(0)

 相关类:

P.S:这个应用类我就改了下,现实中我是将这个类给做成了Proxy来代替现有的Display以及子类。

  1. package com.xintend.util {  
  2.     import flash.display.DisplayObject;  
  3.     import flash.display.Sprite;  
  4.     import flash.geom.Point;  
  5.       
  6.     /**  
  7.     * [AS3]DynamicRegistrationDisplayObject  
  8.     * 动态注册点   
  9.     * @author telds[kingfo] www.xintend.com    
  10.     *   
  11.     * 一级参考:  
  12.     *   作者: Darronschall        [ActionScript 2]  
  13.     *   站点: http://www.darronschall.com/weblog/archives/000054.cfm  
  14.     *   
  15.     * 二级参考:  
  16.     *   作者:     Robert Penner       [ActionScript 1]  
  17.     *   站点: www.robertpenner.com      
  18.       
  19.     */ 
  20.     public class DynamicRegistrationDisplayObject{  
  21.         public function get displayObject():DisplayObject { return _displayObject; }  
  22.           
  23.         public function get depth():Number { return _depth; }  
  24.         public function set depth(value:Number):void {  
  25.             _depth = value;  
  26.         }  
  27.           
  28.         public function get label():String { return _label; }         
  29.         public function set label(value:String):void {  
  30.             _label = value;  
  31.         }  
  32.           
  33.           
  34.         public function get stageRegX():Number { return _stageRegX; }         
  35.         public function get stageRegY():Number { return _stageRegY; }         
  36.           
  37.           
  38.         public function get centerX():Number { return _displayObject.x + _displayObject.width / 2; }          
  39.         public function set centerX(value:Number):void {  
  40.             _displayObject.x = value - _displayObject.width / 2;  
  41.         }  
  42.           
  43.           
  44.         public function get centerY():Number { return _displayObject.y + _displayObject.height / 2; }         
  45.         public function set centerY(value:Number):void {  
  46.             _displayObject.y = value - _displayObject.height / 2;  
  47.         }             
  48.           
  49.         public function get regX():Number { return _regX; }   
  50.         public function get regY():Number { return _regY; }       
  51.           
  52.           
  53.           
  54.         public function DynamicRegistrationDisplayObject():void {  
  55.             initializtion();  
  56.         }  
  57.           
  58.         public function setRegistrationByStage(stageX:Number, stageY:Number):void {  
  59.             _stageRegX = stageX;  
  60.             _stageRegY = stageY;  
  61.             var p:Point = _displayObject.globalToLocal(new Point(stageX,stageY));  
  62.             _regX = p.x;  
  63.             _regY = p.y;  
  64.         }  
  65.           
  66.         public function setRegistrationBySelf(selfX:Number, selfY:Number):void {  
  67.             var p:Point = _displayObject.localToGlobal(new Point(selfX,selfY));  
  68.             _stageRegX = p.x;  
  69.             _stageRegY = p.y;             
  70.             _regX = selfX;  
  71.             _regY = selfY;  
  72.         }  
  73.           
  74.         public function get rotationByRefer():Number { return _displayObject.rotation   }  
  75.         public function set rotationByRefer(value:Number):void {                                      
  76.             setPropRel("rotation", value);  
  77.         }  
  78.           
  79.         public function get scaleXByRefer():Number { return _displayObject.scaleX   }  
  80.         public function set scaleXByRefer(value:Number):void {                                    
  81.             setPropRel("scaleX", value);  
  82.         }  
  83.           
  84.         public function get scaleYByRefer():Number { return _displayObject.scaleY   }  
  85.         public function set scaleYByRefer(value:Number):void {                                    
  86.             setPropRel("scaleY", value);  
  87.         }  
  88.           
  89.           
  90.           
  91.           
  92.         public function initializtion(displayObject:DisplayObject=null):void {  
  93.             //throw new Error("AbstractTile is an Abstract Class");  
  94.             _displayObject = displayObject || new Sprite();  
  95.         }  
  96.           
  97.         protected function setPropRel(property:String, value:Number):void {  
  98.             var p:Point = _displayObject.parent.globalToLocal(_displayObject.localToGlobal(new Point(_regX, _regY)));  
  99.             _displayObject[property] = value;             
  100.             var pp:Point = _displayObject.parent.globalToLocal(_displayObject.localToGlobal(new Point(_regX, _regY)));        
  101.             _displayObject.x -= pp.x - p.x;  
  102.             _displayObject.y -= pp.y - p.y;  
  103.         }  
  104.           
  105.         private var _depth:Number;  
  106.         private var _label:String;  
  107.         private var _regX:Number = 0;  
  108.         private var _regY:Number = 0;  
  109.         private var _stageRegX:Number = 0;  
  110.         private var _stageRegY:Number = 0;  
  111.         private var  _displayObject:DisplayObject;  
  112.     }  
  113.       

 

应用代码:

 

  1. package {  
  2.     import com.xintend.util.DynamicRegistrationDisplayObject;  
  3.     import flash.display.Sprite;  
  4.     import flash.events.MouseEvent;  
  5.     import flash.geom.Point;  
  6.     /**  
  7.     * [AS3]DynamicRegistrationDisplayObjectTest  
  8.     * 动态注册点测试  
  9.     * @author telds[kingfo] www.xintend.com   
  10.     */ 
  11.     public class DynamicRegistrationDisplayObjectTest extends Sprite    {  
  12.           
  13.         private var a:DynamicRegistrationDisplayObject= new DynamicRegistrationDisplayObject();  
  14.         private var t:Sprite = new Sprite();  
  15.         private var c:CrossHairs = new CrossHairs();  
  16.           
  17.         public function DynamicRegistrationDisplayObjectTest():void {             
  18.             t.graphics.beginFill(0xFF0000);  
  19.             t.graphics.drawRect(0, 0, 80, 40);  
  20.             t.graphics.endFill();  
  21.             c.x = t.x = stage.stageWidth / 2- t.width/2;  
  22.             c.y = t.y = stage.stageHeight / 2 - t.height/2;  
  23.             t.buttonMode = true;  
  24.             t.useHandCursor = true;  
  25.               
  26.             t.addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  27.             t.addEventListener(MouseEvent.MOUSE_OUT, handleMOUSE);  
  28.               
  29.             a.initializtion(t);  
  30.               
  31.             addChild(t);  
  32.             addChild(c);  
  33.         }  
  34.           
  35.         private  function handleMOUSE(event:MouseEvent):void {  
  36.             switch(event.type) {  
  37.                 case MouseEvent.MOUSE_DOWN:  
  38.                     a.setRegistrationByStage(mouseX, mouseY);  
  39.                     trace(a.regX,a.regY);  
  40.                     trace(a.stageRegX, a.stageRegY);  
  41.                     trace(t.globalToLocal(new Point(mouseX,0)).x,t.globalToLocal(new Point(0,mouseY)).y);  
  42.                     c.x = mouseX;  
  43.                     c.y = mouseY  
  44.                     removeEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  45.                     addEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);  
  46.                     addEventListener(MouseEvent.MOUSE_UP, handleMOUSE);  
  47.                 break;  
  48.                 case MouseEvent.MOUSE_MOVE:  
  49.                     trace(t.mouseX - a.regX, t.mouseY - a.regY);  
  50.                     a.rotationByRefer += 5;  
  51.                     //a.scaleXByRefer += 5;  
  52.                 break;  
  53.                 case MouseEvent.MOUSE_UP:     
  54.                     addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  55.                     removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);  
  56.                 break;  
  57.                 default:  
  58.                     addEventListener(MouseEvent.MOUSE_DOWN, handleMOUSE);  
  59.                     removeEventListener(MouseEvent.MOUSE_MOVE, handleMOUSE);  
  60.             }  
  61.         }  
  62.     }  
  63. }  
  64. import flash.display.Shape;  
  65.  
  66. class CrossHairs extends Shape {  
  67.     public function CrossHairs() {  
  68.         graphics.lineStyle(1,0);  
  69.         graphics.moveTo( -10, 0);  
  70.         graphics.lineTo( 10, 0);  
  71.         graphics.moveTo( 0, -10);  
  72.         graphics.lineTo( 0, 10);  
  73.     }  

SWF: 

点击下载此文件

[转]一些实用的Python脚本

2008-8-15 0:39:56 开发者 抢沙发(0)

数据缩进貌似已经被机器忽略了。。。

  1. 下面的例子都是在windows下完成的。   
  2.  
  3. 1,读取文本文件的每行(假定C:根目录下有一个test.txt文件)。   
  4.  
  5. f = open("c:/test.txt")   
  6. while(True):   
  7. str = f.readline()   
  8. if str == "" : break   
  9. #TODO:your code here   
  10. print str   
  11. f.close()   
  12.  
  13. 2,使用glob模块进行查询指定的excel文件,并使用第三方模块xlrd(需要安装下载http://beauty.run-to.com/TechDocs/Product/xlrd-0.5.2.tgz,先解压,安装时,使用命令行到xlrd解压目录内,使用命令setup.py install进行安装。以下同)解析excel文档。(注:py文件中要是有汉字,比如注释或字符串,那么在文件的头部加上#-*- encoding:utf-8 -*-标志,就可以识别中文集了。不过需要注意的是,使用notepad在英文系统下保存时默认是ansi,所以应该使用notepad的另存为,然后encoding选择utf-8而不是ansi,然后类型选择所有类型,保存成py文件,否则就算加了标志,显示的还是乱码,下同)。   
  14.  
  15. #-*- encoding:utf-8 -*-   
  16. import xlrd   
  17. import types   
  18. import time   
  19. import os   
  20. import glob   
  21.  
  22. def Calc(excelname) :   
  23.  
  24. #open excel   
  25. book = xlrd.open_workbook(excelname)   
  26. #read first sheet   
  27. sh = book.sheet_by_index(0)   
  28. #read data from excel at first column   
  29. print excelname + ":"   
  30. for rx in range(sh.nrows) :   
  31. d = sh.cell_value(rowx=rx, colx=0)   
  32. print d   
  33.  
  34.  
  35. if __name__ == "__main__" :   
  36. #########   
  37. #xl*.xls匹配excel文件,并且该文件的文件名头两个字为xl   
  38. for excelname in glob.glob( 'xl*.xls' ) :   
  39. Calc(excelname)   
  40.  
  41. 3,xml的解析。   
  42.  
  43. #!/usr/bin/python   
  44. #-*- encoding:utf-8 -*-   
  45.  
  46. from xml.sax import make_parser   
  47. from xml.sax import ContentHandler   
  48. import string   
  49.  
  50. class MyHandler(ContentHandler):   
  51.  
  52. def startElement(self,name,attrs): #遇到元素开头时执行,如<para>   
  53. self.name = name   
  54. self.content = ""   
  55. def endElement(self,name): #遇到元素尾时执行,如</para>   
  56. print self.name + "=" + self.content   
  57. def characters(self,content): #获取元素内容   
  58. self.content = content   
  59. ch = MyHandler() #生成ContentHandler的实例   
  60. saxparser = make_parser() #创建sax处理器   
  61. saxparser.setContentHandler(ch) #关联   
  62. saxparser.parse('test.xml')   
  63.  
  64. 4,获取某个网站的网页内容(你可以通过这个例子写出抓取网络信息的程序)。   
  65. 以下是到sina网站上获取当天的浦发银行的股票信息的代码。   
  66.  
  67. import urllib   
  68. pg = urllib.urlopen('http://hq.sinajs.cn/list=sh600000')   
  69. cont = pg.read()   
  70. print cont   
  71.  
  72. 5,正则表达式的使用。   
  73.  
  74. import re   
  75.  
  76. p = re.compile('[a-z]+\d{3}')   
  77.  
  78. str = "fasfnnhzc123aff;^%^Fsdfg sd"   
  79.  
  80. m = p.match(str)   
  81.  
  82. print m.group()   
  83.  
  84. 6,RPC远程过程调用的例子(分为服务端和客户端代码)。   
  85.  
  86. 这是服务端代码:   
  87. server.py:   
  88.  
  89. import SimpleXMLRPCServer   
  90.  
  91. #定义自己的CMS类   
  92. class MyCMS:   
  93. def getVersion(self):#向外公开版本的方法   
  94. return "Powerd By Python 0.1a"   
  95.  
  96. cms = MyCMS()   
  97. server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost"8888))   
  98. server.register_instance(cms)   
  99.  
  100. print "Listening on port 8888"   
  101. server.serve_forever()#服务器执行,并监听8888端口   
  102.  
  103. 这是客户端代码:   
  104. client.py:   
  105.  
  106. import xmlrpclib   
  107.  
  108. server = xmlrpclib.ServerProxy("http://localhost:8888")   
  109.  
  110. version = server.getVersion()   
  111.  
  112. print "version:"+version  
  113.  

 

  1. 创建文件夹以及判断文件是否存在:  
  2. import os  
  3.  
  4. #创建test目录,注意不可嵌套创建,也就是要是C:/test目录  
  5. #不存在则不能创建子目录c:/test/test。  
  6. os.mkdir('c:/test')  
  7.  
  8. dirFlag = os.path.exists('c:/test')  
  9.  
  10. fileFlag = os.path.exists('c:/test/test.txt')  

 

  1. 使用PIL图像处理模块:  
  2. import Image, ImageDraw, ImageFont  
  3. import ImageFilter  
  4. import ImageEnhance  
  5. from math import atan, degrees  
  6.  
  7. #显示jpg(假定当前目录存在一个叫做Blue hills.jpg的图片)  
  8. im = Image.open("Blue hills.jpg")  
  9. im.show()  
  10.  
  11. #缩小一半  
  12. nim = im.resize((im.size[0] / 2,im.size[1] / 2) ,Image.BILINEAR)  
  13. #如果要保存的话,下面注释打开即可  
  14. #nim.save("Blue hills Resize 2.jpg")  
  15. nim.show()  
  16.  
  17. #旋转45度  
  18. nim2 = nim.rotate( 45, Image.BILINEAR )  
  19. #nim2.save( "Blue hills rotated.jpg" )  
  20. nim2.show()  
  21.  
  22. #滤镜  
  23. nim3 = im  
  24. for i in range(2): nim3 = nim3.filter( ImageFilter.BLUR )  
  25. nim3.show()  
  26.  
  27. #加logo  
  28.  
  29. text = "Hello Logo!" 
  30.  
  31. img = im  
  32. FONT = "c:/windows/fonts/verdana.ttf" 
  33. watermark = Image.new("RGBA", (im.size[0], im.size[1]))  
  34. draw = ImageDraw.ImageDraw(watermark, "RGBA")  
  35. size = 0 
  36. while True:  
  37. size += 1 
  38. nextfont = ImageFont.truetype(FONT, size)  
  39. nexttextwidth, nexttextheight = nextfont.getsize(text)  
  40. if nexttextwidth+nexttextheight/3 > watermark.size[0]:  
  41. break 
  42. font = nextfont  
  43. textwidth, textheight = nexttextwidth, nexttextheight  
  44.  
  45. draw.setfont(font)  
  46. draw.ink = 255 + 255*255 + 255*255*255 
  47. draw.text(((watermark.size[0]-textwidth)/2,(watermark.size[1]-textheight)/2), text)  
  48. watermark = watermark.rotate(degrees(atan(float(img.size[1])/img.size[0])),Image.BICUBIC)  
  49. mask = watermark.convert("L").point(lambda x: min(x, 55))  
  50. watermark.putalpha(mask)  
  51. img.paste(watermark, None, watermark)  
  52. img.show()  

 

  1. 简单使用wxpython的一个例子:  
  2.  
  3. import wx  
  4.  
  5. class MyFrame(wx.Frame):  
  6.  
  7. def __init__(self, parent, title):  
  8. wx.Frame.__init__(self, parent, -1, title,  
  9. pos=(150150), size=(350200))  
  10.  
  11.  
  12.  
  13. # 使用面板放置其他控件  
  14. panel = wx.Panel(self)  
  15.  
  16. # 加了一个标签和按钮  
  17. text = wx.StaticText(panel, -1"Hello World!")  
  18. text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))  
  19. text.SetSize(text.GetBestSize())  
  20.  
  21. btn = wx.Button(panel, -1"Close")  
  22.  
  23. # 绑定按钮事件  
  24. self.Bind(wx.EVT_BUTTON, self.OnTimeToClose, btn)  
  25.  
  26. #设置布局用的sizer  
  27. sizer = wx.BoxSizer(wx.VERTICAL)  
  28. sizer.Add(text, 0, wx.ALL, 10)  
  29. sizer.Add(btn, 0, wx.ALL, 10)  
  30.  
  31. panel.SetSizer(sizer)  
  32. panel.Layout()  
  33.  
  34. def OnTimeToClose(self, evt):  
  35. print "See ya later!" 
  36. self.Close()  
  37.  
  38.  
  39. class MyApp(wx.App):  
  40. def OnInit(self):  
  41. frame = MyFrame(None"Simple wxPython App")  
  42. self.SetTopWindow(frame)  
  43.  
  44. frame.Show(True)  
  45. return True 
  46.  
  47. app = MyApp(redirect=True)  
  48. app.MainLoop()  

MySQL-Python

2008-8-15 0:21:32 开发者 抢沙发(0)

http://mysql-python.sourceforge.net/

 记录下

http://mysql-python.sourceforge.net/

 记录下

 

  1. #!/usr/bin/env python  
  2. # -*-coding:UTF-8-*-#这一句告诉python用UTF-8编码  
  3. #=========================================================================  
  4. #  
  5. # NAME: Python MySQL test  
  6. #  
  7. # AUTHOR: benyur  
  8. # DATE  : 2004-12-28  
  9. #  
  10. # COMMENT: 这是一个python连接mysql的例子  
  11. #  
  12. #=========================================================================   
  13. """  
  14.  ***** This is a MySQL test *****  
  15.    
  16.  select:  
  17.   conn=Connection()  
  18.   conn.select_db('test')  
  19.   cur=conn.cursor()  
  20.   cur.execute('select * from user')  
  21.   cur.scroll(0)  
  22.   row1=cur.fetchone()  
  23.   row1[0]  
  24.   row1[1]  
  25.   row1[2]  
  26.     
  27.  insert:  
  28.   cur.execute('insert into user (name,passwd) values('benyur','12345')')  
  29.   cur.insert_id()  
  30.     
  31.  update:  
  32.   cur.execute('update user set passwd='123456' where name='benyur'')  
  33.     
  34.  delete:  
  35.   cur.execute('delete from user where id=2')  
  36.    
  37.  **********************************  
  38. """ 
  39.  
  40. from MySQLdb import *  
  41.  
  42. def conn():  
  43.  conn=Connection()  
  44.  conn.select_db('test')  
  45.  cur=conn.cursor()  
  46.  cur.execute('select * from user')  
  47.  cur.scroll(0)  
  48.  row1=cur.fetchone()  
  49.  row1[0]  
  50.  row1[1]  
  51.  row1[2]  
  52.  
  53. def usage():  
  54.  print __doc__  
  55.  
  56. if __name__=='__main__':  
  57.  usage()  

[转]比较常用的网络正则表达式

2008-8-6 0:00:55 开发者 抢沙发(0)
提取信息中的网络链接:
(h|H)(r|R)(e|E)(f|F)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?  

 

提取信息中的邮件地址:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*  

提取信息中的图片链接:
(s|S)(r|R)(c|C)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?

提取信息中的ip地址:  
(\d+)\.(\d+)\.(\d+)\.(\d+)    

提取信息中的中国手机号码:
(86)*0*13\d{9}    

提取信息中的中国固定电话号码:
(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}    

提取信息中的中国电话号码(包括移动和固定电话):
(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}    

提取信息中的中国邮政编码:
[1-9]{1}(\d+){5}    

提取信息中的中国身份证号码:
\d{18}|\d{15}    

提取信息中的整数:
\d+    

提取信息中的浮点数(即小数):
(-?\d*)\.?\d+    

提取信息中的任何数字  :
(-?\d*)(\.\d+)?  

提取信息中的中文字符串:
[\u4e00-\u9fa5]*    

提取信息中的双字节字符串  (汉字):
[^\x00-\xff]*  

提取信息中的英文字符串:
\w*
 

.Net连接同服务器下多个Mysql问题终于解决

2008-8-5 23:52:10 开发者 抢沙发(0)

哎,我太逊了,以致以为是IPAdd:Port形式的............糗字怎一个字了得!!!

PS:我的MyDotnet连接库是5.2的........

 

以下为[转],标记以记录。。。。  红色的为本次解决方式...............
 

[数据库连接字符串] MySQL 连接字符串
MyODBC
 
MyODBC 2.50 本地数据库
Driver={mySQL};Server=localhost;Option=16834;Database=myDataBase;
 
   
MyODBC 2.50 远程数据库 
Driver={mySQL};Server=myServerAddress;Port=3306;Option=131072;Stmt=; Database=myDataBase;Uid=myUsername;Pwd=myPassword;
 
   
MyODBC 3.51 本地数据库
Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=myDataBase; User=myUsername;Password=myPassword;Option=3;
 
   
MyODBC 3.51 远程数据库
Driver={MySQL ODBC 3.51 Driver};Server=data.domain.com;Port=3306;Database=myDataBase;User=myUsername; Password=myPassword;Option=3;
 
   
OLE DB, OleDbConnection (.NET)
 
标准
Provider=MySQLProv;Data Source=mydb;User Id=myUsername;Password=myPassword;
 
   
Connector/Net 1.0 (.NET)
 
标准
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
 
默认端口号是3306.  
  
指定端口号
Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername;Pwd=myPassword; 
 
   
命名管道
Server=myServerAddress;Port=-1;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
 
如果端口是-1,意思是告诉驱动程序使用命名管道网络协议来连接数据库。
  
MySqlConnection (.NET)
 
eInfoDesigns.dbProvider
Data Source=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Command Logging=false;
 
   
SevenObjects MySqlClient (.NET)
 
标准
Host=myServerAddress;UserName=myUsername;Password=myPassword;Database=myDataBase;
 
   
Core Labs MySQLDirect (.NET)
 
标准
User ID=root;Password=myPassword;Host=localhost;Port=3306;Database=myDataBase; Direct=true;Protocol=TCP;Comdivss=false;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;
 
   
MySQLDriverCS (.NET)
 
标准
Location=myServerAddress;Data Source=myDataBase;UserID=myUsername;Password=myPassword;Port=3306;Extended Properties=""""; 
 
 

Alternativa3D 5.0.3 and Flash Player 10 version

2008-8-2 21:00:35 新闻 抢沙发(0)

Alternativa3D 5.0.3 and Flash Player 10 version

31.07.2008 Anton Volkov

There is the Alternativa3D 5.0.3 update on the site.

Changelog:

  • OBJ-models loader added
  • Mesh setMaterialToAllSurfaces method renamed to cloneMaterialToAllSurfaces
  • Method close added to Loader3DS, manually interrupting uploading
  • Texture parameters made only for reading
  • Bug fixed - there were no redrawing after faces UV-coordinates update
  • Added indication of missing or incorrect UV-mapping doing texture drawing
  • Optimized memory usage for collision detection
  • Documentation updated

Since this version there will be two versions of Alternativa3D in our package, adapted for Flash Player 9 and 10 accordingly.

Also our documentation now can be integrated into Eclipse as a plug-in. It can be install directly from Eclipse, by setting address http://help.alternativaplatform.com as an update website.

Eclipse 3.3: Help > Software Updates > Find and Install > Search for new features to install > New Remote Site…

Eclipse 3.4: Help > Software Updates > Available Software > Add Site…