不知道现在还有多少人在用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.第一个弹框,输入导出的图片名称,点击确定按钮
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脚本,点击三角形形状的“运行脚本”按钮就可以了