Month: October 2008

用Javascript實現網站簡繁體轉換

Posted by – 2008-10-25

基本上這邊的方法是參考在 UTF8 編碼下的網頁簡繁互轉新同文堂兩者後進行整合得到的,一支程式可以同時在big5, gbk ,utf8 三種編碼下使用(其實是所有的編碼都可以,但是中文常見的是這三種),並且可擁有詞庫對應功能,在簡繁並存的網頁上會有比較好的效果(基本上就跟新同文堂轉出來的效果一樣),瀏覽器測過FF3 跟 IE6&7都沒問題。
效果如下


程式碼放在
javascript程式(需搭配jquery)
簡繁體字詞對應資料(資料由新同文堂中取出,已獲得 softcup自由取用的許可)

flex sdk + amfphp 開發時 swf測試發佈技巧

Posted by – 2008-10-12

目前我是用vim + flex sdk來做flex的開發,跟server端則是透過remoteObject 與amfphp做溝通。但是這常遇到一個討厭的狀況,就是當我透過fcsh把swf檔編譯出來後,要上傳到server端才能夠正常的run跟debug。使得每次編譯完都要做一次rsync的動作。後來想到架一個proxy來把遠端的url指到本機上的檔案不就好了。一開始是用squid+apache來做這件事情,後來想起來apache自己就有mod_proxy可用呀,於是乎就在local裝上 apache,然後把下面的設定貼在config裏面就好了。

ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Proxy>

RewriteEngine On
RewriteRule http://aaa.com/bbb/ccc.swf.* http://127.0.0.1/ccc.swf [P]

如此一來, 再把apache Doucment Root下建立ccc.swf的link,並且設定firefox連線時透過127.0.0.1:80的proxy,這樣子firefox再開啟http://aaa.com/bbb/ccc.swf時就會去載入剛剛透過fcsh編譯好的東西了。省下一天到晚rsync的動作

圖片中使用HSV值進行膚色偵測

Posted by – 2008-10-08

最近想把膚色的圖片找出來,於是就Google了一下,最後發現使用HSV值去做判斷是比較好的方法。於是就用php硬幹了一個做測試,使用(((0<=$h && $h <=1.10)||$h>5.18 )&& 0.1<=$s && $s <= 0.63 && 0.35<=$v && $v <=1)當條件,效果還可以接受,原始碼如下

function rgb2hsv($r,$g,$b){
$r=$r/255;
$g=$g/255;
$b=$b/255;
$max=max($r,$g,$b);
$min=min($r,$g,$b);
$v=$max;
if($max-$min==0){
return array(0,0,$v);
}
$s=($max-$min)/$max;
if($max==$r){
$h=(6+($g-$b)/($max-$min));
}elseif($max==$g){
$h=(2+($b-$r)/($max-$min));
}elseif($max==$b){
$h=(4+($r-$g)/($max-$min));
}
$h=(($h*60)%360)*(2*pi()/360);
return array($h,$s,$v);
}
$img=imagecreatefromjpeg("./1.jpg");
$img2=imagecreatetruecolor(ImageSX($img),ImageSY($img));
for($y=0;$y&lt;ImageSY($img);$y++){
for($x=0;$x&lt;ImageSX($img);$x++){
$rgb = imagecolorat($img, $x, $y);
$r = ($rgb &gt;&gt; 16) &amp; 0xFF;
$g = ($rgb &gt;&gt; 8 ) &amp; 0xFF;
$b = $rgb &amp; 0xFF;
//print_r(rgb2hsv($r,$g,$b));
//die();
list($h,$s,$v)=rgb2hsv($r,$g,$b);
if(((0&lt;=$h &amp;&amp; $h &lt;=1.10)||$h&gt;5.18 )&amp;&amp; 0.1&lt;=$s &amp;&amp; $s &lt;= 0.63 &amp;&amp; 0.35&lt;=$v &amp;&amp; $v &lt;=1){
//if(0&lt;=$h &amp;&amp; $h &lt;=1.388 &amp;&amp; 0.23&lt;=$s &amp;&amp; $s &lt;= 0.63 &amp;&amp; 0.25&lt;=$v &amp;&amp; $v &lt;=1){
imagesetpixel( $img2 , $x  , $y  , $rgb);
//echo "==$x,$y==\n";
//var_dump($r, $g, $b);
//var_dump($h, $s, $v);
}else{
imagesetpixel( $img2 , $x , $y  , 0);
}
}
//die();
}
imagepng($img2,"2.png",9,PNG_ALL_FILTERS);