天天看點

Flash:快速導出png(jsfl)

不知道現在還有多少人在用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.第一個彈框,輸入導出的圖檔名稱,點選确定按鈕

Flash:快速導出png(jsfl)

4.第二個彈框,輸入放大倍數,點選确定按鈕

Flash:快速導出png(jsfl)

5.看到如下提示框則表示成功

Flash:快速導出png(jsfl)
  • 常見問題

檔案儲存在哪?

png檔案将會導出到和jsfl腳本同目錄下的jsfl檔案夾裡,是以移動jsfl檔案,導出目錄也會随着改變。

另外jsfl在macOS下面也管用的哦!

為什麼有時導出的圖檔不正确?

如果發現導出的尺寸不對,則需要重置下導出設定。重置方法:

1.執行 檔案(F)—導出(E)—導出圖像(E)…

2.在彈出的 “導出PNG”彈框中,設定 分辨率為 “72dpi”,包含為“完整文檔大小”

Flash:快速導出png(jsfl)

為什麼輕按兩下jsfl沒有反應?

在win10下,輕按兩下jsfl腳本可能沒有反應,此時還有另外兩種運作腳本的方式。

方式1:Flash裡面的運作指令

其實更推薦使用這種方式打開jsfl腳本,執行改指令後會彈出一個檔案對話框讓你選擇腳本檔案,這個對話框的預設路徑是獨立的,如果腳本是放在固定位置,每次運作這個指令可以第一時間找到jsfl腳本檔案。

Flash:快速導出png(jsfl)

方式2:腳本編輯模式下運作

  執行 檔案(F)—打開(O)(快捷鍵 ctrl+O),選擇jsfl檔案

  此時可以在flash裡面編輯jsfl腳本,點選三角形形狀的“運作腳本”按鈕就可以了

Flash:快速導出png(jsfl)

2020-04-12 更新:

導png功能已經寫成插件了,使用更友善,有需求的不妨試試

https://github.com/hufang360/FlashTool

Flash:快速導出png(jsfl)