Category: Flex&AIR

即時組合Flash嵌入式字型

Posted by – 2009-03-26

之前用過haxe+swfll 快速的生成帶有嵌入字型的SWF檔來做到字型載入的動作

但是這樣每次都要載入一個新完整的字型檔

經過努力之後,發現可以透過拆解SWF與 loader.loadBytes()的方式載入字型檔

所以目前已經可以做到只需要載入目前沒有的字的字型就可以了

運作原理大致上是
1. 先載入一個 用 swfill+haxe做出來的包含了字型的swf檔
2. 將載入的SWF利用ByteArray分析&分解
3. 當發現需要用到的字型,不在我剛剛讀進來的字型時,
就即時去讀取server上的字型資訊
4. 當 字型資訊 被載入後,便與剛剛 我們分解好的字型ByteArray作組合
5. 將組合好的字型ByteArray,透過loader.loadBytes 載入
6. 重新註冊字型,如此我們便可以得到包含我們需要字的字型了

細部的文件正在撰寫中,有興趣的朋友可以先參考下面的連結

另外請特別注意,這邊實做的是DefineFont3,並不是flash player10 新支援的DefineFont4

Demo:
一次載入一個字
http://www.tkalu.com/tmp/flash-dynamic-font-loader/demo_1
可以合併數個字型變成一個flash中的新字型
http://www.tkalu.com/tmp/flash-dynamic-font-loader/demo_2/

簡易的多語系版sIFR

Posted by – 2009-01-02

記得在去年的HDM4上說道想要把flex3 即時載入中文字型測試v2做成中文版的sIFR。過了一年目前終於有點進展了。

主要就是寫了jQuery的plugin來處理要被取代的元素 跟 as3版的flash用來載入字型與繪製文字的。至於在HDM4上面提到的問題統統都還沒有解決 ,如果今年會有時間的話再來用硬派的方法來處理掉他 XD。Demo。

如果有人想要自己測試看看的話,請複製下面語法到自己的網頁裡面就可以了,他會把 具有class=”df”的元素取代成flash的文字,不過目前只實做了少部份的的功能,所以應該會有不少奇怪的問題,特別是在IE上面  :p。

<script type=”text/javascript” src=”http://www.tkalu.com/tmp/demo/rgbcolor.js”></script>
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js”></script>
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js”></script>
<script type=”text/javascript” src=”http://www.tkalu.com/tmp/demo/jquery.df.js”></script>
<script>
</script>
<script type=”text/javascript”>
$(document).ready(function(){
$(’.df’).df(fontFamily); //fontFamily目前提供0-4,一共5種字型
}
);
</script>

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的動作

即時flash嵌入中文字型

Posted by – 2008-09-28

因為有需要在flex的程式中使用到不同的字型

但是中文字型整個包進去又大的嚇人 所以就想用動態載入的方式來解決

於是就很暴力的server端利用 flex3 sdk 即時編譯actionscript3的原始碼

來產生內含字型描述的SWF檔,並透過cache機制,讓他只有在第1次載入時需要編譯

基本上功能大致都達到了,但是目前還有兩個問題尚未解決
1.部份字型參考調整後仍嵌入
2.mxmlc編譯速度緩慢,但若改用swfmill的話,還不知道如何使用其中的嵌入字型

實作Demo 與原始碼
http://www.tkalu.com/tmp/embedFontText/

更新:

剛剛找到加速編譯的方法了

透過 haxe 把 swfill編出來的檔案再包一層就可以了

速度上達到十分滿意的效果  20個字以內幾乎沒有感覺

http://tw.news.yahoo.com/article/url/d/a/080928/2/16pnq.html
這篇文章丟進去抓字型編譯只需要 2-3秒鐘

實作Demo 與原始碼請參考
http://www.tkalu.com/tmp/embedFontText2

Flex&AIR

Posted by – 2008-06-08

昨天參加Flex&AIR網聚。今天試著實作看看,在看過Developing Adobe® AIR™ Applications with HTML and Ajax後搭配之前Flex sdk的開發經驗,整體來說還滿簡單的,只希望linux上不要出現麼什麼詭異的狀況呀。

一個小時後=>發現看Developing AIR applications with Flex比較多東西呀 Orz

再一個小時候=>原來AIR不提供螢幕抓圖的功能,難怪網聚中demo的自拍程式,某些功能要透過print screen鍵+剪貼簿來實現呀

又一個小時後=>發現AIR1.0目前還不能呼叫外部的程式,那我想使用合體技的美夢不就要繞好大一圈,直覺想到可以在local端裝apache+php透過http request呼叫,再不然就是搬出socket寫個proxy來用,但是這樣也太熱血了吧。雖然之前有搞過一次的經驗,可是每次都這樣怎麼受的了呀。而且這樣就不能散佈跟跨平台拉,真是一點AIR的感覺都沒有了 。