最近處理一個swf優化的需求,由於要加載的swf越來越大,要對swf進行瘦身,面對上百張的圖片,哥用的是flash CS4,沒有直接導出的,雖然有另一種非常蛋疼的導出方式,但作爲一個程序猿,要學會懶惰,真正學會把編程作爲一門工具。
不多說直接進入主題,先簡單介紹一下JSFL這個東西,其實Flash有其對fla文檔進行操作的語言,沒錯這個語言就是JSFL,相信很多做flash遊戲和廣告的都會用過九宮處理圖片,但手工九宮也是個蛋疼的過程,JSFL首先應用在九宮上。flash把整個fla文檔看做一個樹結構形式,類似DOM模型。最強大的是它還有文件操作的功能,這個文件操作功能是可以直接操作硬盤的文件哇。哥在多番搜索後,在天地會找到了一份JSFL的API文檔,API文檔在公司電腦上,有需要的人可以留言,我分享一下。
講解一下代碼。第一行就是選擇儲存的文件夾。第二行的lib是flash的庫哇。可以看到循環中有個比較長的判斷,flash庫裏面的文件如果是圖像就是bitmap類型,還有很多其他類型。linkageClassName就是導出鏈接名,我是判斷連接名是否存在並且鏈接名含有day的字符串就對其導出。我保留了pngName這個取出,因爲本來是打算直接以該文件名命名的,但由於程序裏面標識是用鏈接名的,所以我後來換了鏈接名來重命名。exportToFile就是導出的方法,比較簡單,也不多說了,下面就是代碼。
var fileURL = fl.browseForFolderURL();
var lib = fl.getDocumentDOM().library;
var libLength = lib.items.length;
var items=lib.items;
for(var i=0;i<libLength;i++)
{
var item = lib.items[i]
if(item.itemType=="bitmap" && item.linkageClassName && item.linkageClassName.indexOf("day") = -1 )
{
itemName=item.name;
var pngName=itemName.substring(itemName.lastIndexOf("/")+1);
if(pngName.indexOf('.') == -1)
{
pngName += ".png";
}
fl.trace(pngName);
item.exportToFile(fileURL+"/"+item.linkageClassName + ".png");
}
}