不知道現在還有多少人在用Flash制作内容,如果你也想快速提取Flash中的矢量圖形成png,不妨試試這個腳本。
- 建立腳本
1.建立一個txt文本文檔
1.将下面的代碼複制粘貼到txt中,并儲存
3.将".txt"擴充名改為".jsfl"
//導出所選到png v1.3
//将flash所選内容儲存為png
// 素材将儲存到腳本目錄下的 JSFL 檔案夾裡
// 支援設定導出的素材名稱
// 支援将素材放大導出
//将儲存位置設定為腳本同目錄下的 JSFL 檔案夾
var folder = getFolder(fl.scriptURI) + "JSFL/"
FLfile.createFolder(folder);
start();
function start()
{
//打開的文檔
var doc = fl.getDocumentDOM();
if( !doc )
{
alert("請打開fla文檔");
return;
}
//判斷是否有所選内容
if( doc.selection.length == 0 )
{
alert("請在舞台選擇一個元素");
return;
}
//擷取選中的元件名稱
var eleName = "";
if (doc.selection.length == 1) {
var ele = doc.selection[0];
if (ele.elementType == "instance") {
eleName = ele.libraryItem.name;
// 如果是庫檔案,則隻取元件名
var index = eleName.lastIndexOf("/");
if (index != -1)
eleName = eleName.substring(index + 1);
} else {
eleName = doc.selection[0].name;
}
}
//互動提示
var inputName = prompt("請輸入素材的名字", eleName)
if(inputName==null) return
eleName = inputName
var inputRate = prompt("請輸入放大倍數", 1)
if(inputRate==null) return
inputRate = parseFloat(inputRate)
if (!inputRate) inputRate = 1
//拷貝所選内容到新的文檔
doc.clipCopy();
//建立新文檔
var exportDoc = fl.createDocument();
exportDoc.clipPaste();
exportDoc.selectAll();
// 轉成元件 并進行縮放
exportDoc.convertToSymbol("graphic", "eClip", "top left")
var clip = exportDoc.selection[0];
clip.scaleX = inputRate;
clip.scaleY = inputRate;
//将元件轉成位圖,解決邊界計算比實際略小的情況
exportDoc.convertSelectionToBitmap();
//設定舞台大小 将圖檔尺寸調整為偶數
var bm = exportDoc.selection[0];
bm.x = 0;
bm.y = 0;
bmW = Math.ceil(bm.width);
bmH = Math.ceil(bm.height);
bmW = bmW % 2 == 0 ? bmW : bmW + 1
bmH = bmH % 2 == 0 ? bmH : bmH + 1
exportDoc.width = bmW;
exportDoc.height = bmH;
var timeStr = getTimeStr();
var pngName = folder + timeStr + "_" + eleName + ".png";
//去掉檔案的擴充名
//pngName = pngName.replace("fla","");
//pngName = pngName.replace(".xfl","");
exportDoc.selectNone();
exportDoc.exportPNG(pngName,true,true);
exportDoc.close(false);
var showStr = "☀☀☀導出成功☀☀☀\n " + pngName;
showStr = showStr.replace("file:///","");
showStr = showStr.replace("|/",":/");
alert( showStr );
}
function getFolder(str)
{
var index = str.lastIndexOf("/");
if (index != -1)
str = str.substring(0,index+1);
return str;
}
function getFile(str)
{
var index = str.lastIndexOf("/");
if (index != -1)
str = str.substring(index + 1);
return str;
}
// 20180803
function getTimeStr()
{
var today = new Date();
var y = checkTime(today.getFullYear());
var m = checkTime(today.getMonth() + 1);
var d = checkTime(today.getDate())
return y + m + d;
}
function checkTime(i) {
if (i < 10) i = "0" + i;
return i.toString()
}
- 如何使用
1.在Flash中選中你要導出的内容
2.輕按兩下jsfl腳本,運作成功後會出現兩個彈框
3.第一個彈框,輸入導出的圖檔名稱,點選确定按鈕
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyM2EjMykjMwADNwgDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
4.第二個彈框,輸入放大倍數,點選确定按鈕
5.看到如下提示框則表示成功
- 常見問題
檔案儲存在哪?
png檔案将會導出到和jsfl腳本同目錄下的jsfl檔案夾裡,是以移動jsfl檔案,導出目錄也會随着改變。
另外jsfl在macOS下面也管用的哦!
為什麼有時導出的圖檔不正确?
如果發現導出的尺寸不對,則需要重置下導出設定。重置方法:
1.執行 檔案(F)—導出(E)—導出圖像(E)…
2.在彈出的 “導出PNG”彈框中,設定 分辨率為 “72dpi”,包含為“完整文檔大小”
為什麼輕按兩下jsfl沒有反應?
在win10下,輕按兩下jsfl腳本可能沒有反應,此時還有另外兩種運作腳本的方式。
方式1:Flash裡面的運作指令
其實更推薦使用這種方式打開jsfl腳本,執行改指令後會彈出一個檔案對話框讓你選擇腳本檔案,這個對話框的預設路徑是獨立的,如果腳本是放在固定位置,每次運作這個指令可以第一時間找到jsfl腳本檔案。
方式2:腳本編輯模式下運作
執行 檔案(F)—打開(O)(快捷鍵 ctrl+O),選擇jsfl檔案
此時可以在flash裡面編輯jsfl腳本,點選三角形形狀的“運作腳本”按鈕就可以了
2020-04-12 更新:
導png功能已經寫成插件了,使用更友善,有需求的不妨試試
https://github.com/hufang360/FlashTool