// **************************************************
// This file created by Brett Bibby (c) 2010-2013
// You may freely use and modify this file as you see fit
// You may not sell it
//**************************************************
// hidden object game exporter
//$.writeln("=== Starting Debugging Session ===");
// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop
// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
// $.level = 0;
// debugger; // launch debugger on next line
var sceneData;
var sourcePsd;
var duppedPsd;
var destinationFolder;
var uuid;
var sourcePsdName;
var slicePaddingArr = new Array(0,0,0,0)
var sliceOriArr = new Array(0,0,0,0)
main();
function main(){
// got a valid document?
if (app.documents.length <= 0)
{
if (app.playbackDisplayDialogs != DialogModes.NO)
{
alert("You must have a document open to export!");
}
// quit, returning 'cancel' makes the actions palette not record our script
return 'cancel';
}
// ask for where the exported files should go
destinationFolder = Folder.selectDialog("Choose the destination for export.");
if (!destinationFolder)
{
return;
}
// cache useful variables
uuid = 1;
sourcePsdName = app.activeDocument.name;
var layerCount = app.documents[sourcePsdName].layers.length;
var layerSetsCount = app.documents[sourcePsdName].layerSets.length;
if ((layerCount <= 1) && (layerSetsCount <= 0))
{
if (app.playbackDisplayDialogs != DialogModes.NO)
{
alert("You need a document with multiple layers to export!");
// quit, returning 'cancel' makes the actions palette not record our script
return 'cancel';
}
}
// setup the units in case it isn't pixels
var savedRulerUnits = app.preferences.rulerUnits;
var savedTypeUnits = app.preferences.typeUnits;
app.preferences.rulerUnits = Units.PIXELS;
app.preferences.typeUnits = TypeUnits.PIXELS;
// duplicate document so we can extract everythng we need
duppedPsd = app.activeDocument.duplicate();
duppedPsd.activeLayer = duppedPsd.layers[duppedPsd.layers.length - 1];
hideAllLayers(duppedPsd);
// export layers
sceneData = "";
sceneData += "";
sceneData += "\n";
sceneData += "" + duppedPsd.width.value + "";
sceneData += "" + duppedPsd.height.value+ "";
sceneData += "";
sceneData += "\n";
exportAllLayers(duppedPsd);
sceneData += "";
sceneData += "\n";
$.writeln(sceneData);
duppedPsd.close(SaveOptions.DONOTSAVECHANGES);
// create export
var sceneFile = new File(destinationFolder + "/" + destinationFolder.name + ".xml");
sceneFile.encoding = "utf-8"; //写文件时指定编码,不然中文会出现乱码
sceneFile.open('w');
sceneFile.writeln(sceneData);
sceneFile.close();
app.preferences.rulerUnits = savedRulerUnits;
app.preferences.typeUnits = savedTypeUnits;
}
function exportAllLayers(obj)
{
if (typeof(obj) == "undefined"){
return;
}
if (typeof(obj.layers) != "undefined" && obj.layers.length>0) {
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
exportLayer(obj.layers[i])
}
}
else{
exportLayer(obj)
};
}
function exportLayer(obj)
{
if (typeof(obj) == "undefined"){
return;
}
if (obj.typename == "LayerSet") {
exportLayerSet(obj);
}
else if (obj.typename = "ArtLayer"){
exportArtLayer(obj);
}
}
function exportLayerSet(_layer)
{
if (typeof(_layer.layers) == "undefined" || _layer.layers.length<=0 ){
return
}
if (_layer.name.search("@ScrollView") >= 0)
{
exportScrollView(_layer);
}
else if (_layer.name.search("@Grid") >= 0)
{
exportGrid(_layer);
}
else if (_layer.name.search("@Button") >= 0)
{
exportButton(_layer);
}
else if (_layer.name.search("@Toggle") >= 0)
{
exportToggle(_layer);
}
else if (_layer.name.search("@Panel") >= 0)
{
exportPanel(_layer);
}
else if (_layer.name.search("@Slider")>=0) {
exportSlider(_layer);
}
else if (_layer.name.search("@Group")>=0) {
exportGroup(_layer);
}
else if (_layer.name.search("@InputField") >=0) {
exportInputField(_layer);
}
else if (_layer.name.search("@Scrollbar") >=0) {
exportScrollBar(_layer);
}else if (_layer.name.search("@LE") >=0) {//增加布局元素导出
exportLayoutElement(_layer);
}
else
{
sceneData += "";
sceneData += "Normal";
sceneData += "" + _layer.name + "";
sceneData += "";
exportAllLayers(_layer)
sceneData += "";
sceneData += "";
}
}
function exportLayoutElement(obj)
{
sceneData += "";
sceneData += "LayoutElement";
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += "" + itemName + "";
sceneData += "";
exportAllLayers(obj);
// sceneData += "";
// for (var j = obj.artLayers.length - 1; 0 <= j; j--)
// {
// exportArtLayer(obj.artLayers[j]);
// }
// sceneData += "";
sceneData += "";
obj.visible = true;
showAllLayers(obj);
var recSize = getLayerRec(duppedPsd.duplicate());
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
hideAllLayers(obj);
sceneData += "";
}
function exportScrollView(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nScrollView\n" + itemName + "\n");
sceneData += ("\n");
exportAllLayers(obj);
sceneData += ("");
var params = obj.name.split(":");
if (params.length > 2)
{
alert(obj.name + "-------Layer's name is illegal------------");
}
var recSize;
if (obj.layers[obj.layers.length - 1].name.search("@Size") < 0)
{
alert("Bottom layer's name doesn't contain '@Size'");
}
else
{
obj.layers[obj.layers.length - 1].visible = true;
recSize = getLayerRec(duppedPsd.duplicate());
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
obj.layers[obj.layers.length - 1].visible = false;
}
//以下计算padding和spacing
obj.layers[0].visible = true;
showAllLayers(obj.layers[0]); //子图层组已经在上面导出过,要再次计算size需先将其显示
var rec0 = getLayerRec(duppedPsd.duplicate());
hideAllLayers(obj.layers[0]);
obj.layers[0].visible = false;
obj.layers[1].visible = true;
showAllLayers(obj.layers[1]);
var rec1 = getLayerRec(duppedPsd.duplicate());
hideAllLayers(obj.layers[0]);
obj.layers[1].visible = false;
var spacing;
var paddingx;
var paddingy;
if(params[1].search("H") >= 0) //水平间距
{
spacing = rec1.x - rec0.x - rec0.width;
paddingx = rec0.x - (recSize.x - recSize.width / 2) - rec0.width / 2; //x方向边距,默认左右相等
paddingy = (recSize.height - rec0.height) / 2 ; //暂时只考虑上下边距相等
//paddingy = recSize.height / 2 - rec0.height / 2 - (rec0.y - recSize.y); //上边距
//paddingy2 = recSize.height - rec0.height - paddingy; //下边距
}
else //垂直间距
{
spacing = rec0.y - rec1.y - rec0.height;
paddingx = (recSize.width - rec0.width) / 2 ;
paddingy = (recSize.y + recSize.height / 2) - rec0.y - rec0.height / 2;
}
sceneData += "";
sceneData += "" + params[1] + ""; //滑动方向
sceneData += "" + spacing + "";
sceneData += "" + Math.floor (paddingx) + "";
sceneData += "" + Math.floor (paddingy) + "";
sceneData += "";
sceneData += "";
}
function setLayerSizeAndPos(layer)
{
layer.visible = true;
var recSize = getLayerRec(duppedPsd.duplicate());
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
layer.visible = false;
}
function exportGrid(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nGrid\n" + itemName + "\n");
sceneData += ("\n");
exportAllLayers(obj);
sceneData += ("");
var params = obj.name.split(":");
if (params.length != 3)
{
alert("Layer's name is illegal");
}
var recSize;
if (obj.layers[obj.layers.length - 1].name.search("@Size") < 0)
{
alert("Bottom layer's name doesn't contain '@Size'");
}
else
{
setLayerSizeAndPos(obj.layers[obj.layers.length - 1]);
}
var totalContentCount = obj.layers.length - 1;
obj.layers[0].visible = true;
showAllLayers(obj.layers[0]); //子图层组已经在上面导出过,要再次计算size需先将其显示
var rec0 = getLayerRec(duppedPsd.duplicate());
hideAllLayers(obj.layers[0]);
obj.layers[0].visible = false;
var renderHorizontalGap = params[2] > 1 ? (recSize.width - rec0.width * params[2])/(params[2] - 1) : 0;
var renderVerticalGap = params[1] > 1 ? (recSize.height - rec0.height * params[1])/(params[1] - 1) : 0;
sceneData += "";
sceneData += "" + params[1] + ""; //行数
sceneData += "" + params[2] + ""; //列数
sceneData += "" + rec0.width + ""; //render width
sceneData += "" + rec0.height + ""; //render height
sceneData += "" + Math.floor(renderHorizontalGap) + ""; //水平间距
sceneData += "" + Math.floor(renderVerticalGap) + ""; //垂直间距
sceneData += "";
sceneData += "";
}
function exportGroup(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nGroup\n" + itemName + "\n");
exportAllLayers(obj);
var params = obj.name.split(":");
if (params.length != 3 )
{
alert(obj.name + "-------Layer's name not equals 2------------");
}
var recSize;
if (obj.layers[obj.layers.length - 1].name.search("@Size") < 0)
{
alert("Bottom layer's name doesn't contain '@Size'");
}
else
{
obj.layers[obj.layers.length - 1].visible = true;
recSize = getLayerRec(duppedPsd.duplicate());
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
obj.layers[obj.layers.length - 1].visible = false;
}
sceneData += "";
sceneData += "" + params[1] + ""; //方向
sceneData += "" + params[2] + ""; //span
sceneData += "";
sceneData += "";
}
function exportInputField(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nInputField\n" + itemName + "\n");
sceneData += "";
// sceneData += "\n";
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
exportArtLayer(obj.layers[i]);
}
sceneData += "";
// sceneData += "\n\n";
sceneData += "\n";
}
function exportButton(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nButton\n" + itemName + "\n");
sceneData += "";
// sceneData += "\n";
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
exportArtLayer(obj.layers[i]);
}
sceneData += "";
// sceneData += "\n\n";
sceneData += "\n";
}
function exportToggle(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nToggle\n" + itemName + "\n");
sceneData += "";
// sceneData += "\n";
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
exportArtLayer(obj.layers[i]);
}
sceneData += "";
// sceneData += "\n\n";
sceneData += "\n";
}
function exportSlider(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nSlider\n" + itemName + "\n");
var params = obj.name.split(":");
if (params.length != 2)
{
alert(obj.name + "-------Layer's name is not 1 argument------------");
}
var recSize;
if (obj.layers[obj.layers.length - 1].name.search("@Size") < 0)
{
alert("Bottom layer's name doesn't contain '@Size'");
}
else
{
setLayerSizeAndPos(obj.layers[obj.layers.length - 1]);
}
sceneData += "";
sceneData += "" + params[1] + ""; //滑动方向
sceneData += "";
// sceneData += "\n";
sceneData += "";
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
exportArtLayer(obj.layers[i]);
}
sceneData += "";
// sceneData += "\n\n";
sceneData += "\n";
}
function exportScrollBar(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nScrollBar\n" + itemName + "\n");
var params = obj.name.split(":");
if (params.length != 3)
{
alert(obj.name + "-------Layer's name is not 1 argument------------");
}
sceneData += "";
sceneData += "" + params[1] + ""; //滑动方向
sceneData += "" + params[2] + ""; //比例
sceneData += "";
// sceneData += "\n";
sceneData += "";
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
exportArtLayer(obj.layers[i]);
}
sceneData += "";
// sceneData += "\n\n";
sceneData += "\n";
}
function exportPanel(obj)
{
var itemName = obj.name.substring(0, obj.name.search("@"));
sceneData += ("\nPanel\n" + itemName + "\n");
exportAllLayers(obj);
// sceneData += "\n";
sceneData += "";
for (var j = obj.artLayers.length - 1; 0 <= j; j--)
{
exportArtLayer(obj.artLayers[j]);
}
sceneData += "";
// sceneData += "\n\n";
sceneData += "\n";
}
function exportArtLayer(obj)
{
if (typeof(obj) == "undefined") {return};
if (obj.name.search("@Size") >= 0) {return};
sceneData += "\n";
sceneData += "Normal";
//sceneData += "" + makeValidFileName(obj.name) + "";
var validFileName = makeValidFileName(obj.name);
sceneData += "" + validFileName + "";
sceneData += "\n";
// sceneData += "\n";
if (LayerKind.TEXT == obj.kind)
{
exportLabel(obj,validFileName);
}
else if (obj.name.search("Texture") >= 0)
{
exportTexture(obj,validFileName);
}
else
{
exportImage(obj,validFileName);
}
sceneData += "";
// sceneData += "";
sceneData += "\n";
}
function exportLabel(obj,validFileName)
{
//有些文本如标题,按钮,美术用的是其他字体,可能还加了各种样式,需要当做图片切出来使用
if(obj.name.search("_ArtStatic") >= 0)
{
exportImage(obj,validFileName);
return;
}
//处理静态文本,会对应unity的静态字体
var StaticText = false;
if(obj.name.search("_Static") >= 0)
{
StaticText = true;
}
sceneData += "" + "Label" + "\n";
//var validFileName = makeValidFileName(obj.name);
sceneData += "" + validFileName + "\n";
obj.visible = true;
saveScenePng(duppedPsd.duplicate(), validFileName, false);
obj.visible = false;
sceneData += "";
sceneData += "" + obj.textItem.color.rgb.hexValue + "";
if(StaticText == true)
{
sceneData += "" + obj.textItem.font + "_Static" + "";
}
else
{
sceneData += "" + obj.textItem.font + "";
}
//sceneData += "" + obj.textItem.font + "";
sceneData += "" + obj.textItem.size.value + "";
sceneData += "" + obj.textItem.contents + "";
//段落文本带文本框,可以取得对齐方式
if(obj.textItem.kind == TextType.PARAGRAPHTEXT)
{
sceneData += "" + obj.textItem.justification + ""; //加对齐方式
}
sceneData += "";
}
function exportTexture(obj,validFileName)
{
//var validFileName = makeValidFileName(obj.name);
sceneData += "" + "Texture" + "\n";
sceneData += "" + validFileName + "\n";
obj.visible = true;
saveScenePng(duppedPsd.duplicate(), validFileName, true);
obj.visible = false;
}
function exportImage(obj,validFileName)
{
//var validFileName = makeValidFileName(obj.name);
var oriName = obj.name
sceneData += "" + validFileName + "\n";
if (obj.name.search("Common") >= 0)
{
sceneData += "" + "Common" + "\n";
}
else if(obj.name.search("Global") >= 0)
{
sceneData += "" + "Global" + "\n";
}
else
{
sceneData += "" + "Custom" + "\n";
}
if (oriName.search("_9S") >= 0)
{
sceneData += "" + "SliceImage" + "\n";
obj.visible = true;
var _objName = obj.name
// var newDoc = app.documents.add(duppedPsd.width, duppedPsd.height,duppedPsd.resolution, _objName+"doc",NewDocumentMode.RGB,DocumentFill.TRANSPARENT)
// app.activeDocument = duppedPsd
// obj.copy()
// app.activeDocument = newDoc
// newDoc.paste()
// newDoc.activeLayer.name = _objName
var recSize = getLayerRec(duppedPsd.duplicate(),true);
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
// _9sliceCutImg(newDoc,_objName,validFileName);
_9sliceCutImg(duppedPsd.duplicate(),_objName,validFileName);
obj.visible = false;
return;
}
else if(oriName.search("LeftHalf") > 0) //左右对称的图片切左边一半
{
sceneData += "" + "LeftHalfImage" + "\n";
obj.visible = true;
var recSize = getLayerRec(duppedPsd.duplicate());
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
cutLeftHalf(duppedPsd.duplicate(),validFileName);
obj.visible = false;
return;
}
else if(obj.name.search("BottomHalf") > 0) //上下对称的图片切底部一半
{
sceneData += "" + "BottomHalfImage" + "\n";
obj.visible = true;
//半图要先计算出大小和位置
var recSize = getLayerRec(duppedPsd.duplicate());
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
cutBottomHalf(duppedPsd.duplicate(),validFileName);
obj.visible = false;
return;
}
else if(obj.name.search("Quarter") > 0) //上下左右均对称的图片切左下四分之一
{
sceneData += "" + "QuarterImage" + "\n";
obj.visible = true;
var recSize = getLayerRec(duppedPsd.duplicate());
sceneData += "";
sceneData += "" + recSize.x + "";
sceneData += "" + recSize.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + recSize.width + "";
sceneData += "" + recSize.height + "";
sceneData += "";
cutQuarter(duppedPsd.duplicate(),validFileName);
obj.visible = false;
return;
}
else
{
sceneData += "" + "Image" + "\n";
}
obj.visible = true;
saveScenePng(duppedPsd.duplicate(), validFileName, true);
obj.visible = false;
}
function hideAllLayers(obj)
{
hideLayerSets(obj);
}
function hideLayerSets(obj)
{
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
if (obj.layers[i].typename == "LayerSet")
{
hideLayerSets(obj.layers[i]);
}
else
{
obj.layers[i].visible = false;
}
}
}
//显示图层组及组下所有图层
function showAllLayers(obj)
{
showLayerSets(obj);
}
function showLayerSets(obj)
{
for (var i = obj.layers.length - 1; 0 <= i; i--)
{
if (obj.layers[i].typename == "LayerSet")
{
showLayerSets(obj.layers[i]);
}
else
{
obj.layers[i].visible = true;
}
}
}
function getLayerRec(psd,notMerge)
{
// we should now have a single art layer if all went well
if (!notMerge){
psd.mergeVisibleLayers();
}
// figure out where the top-left corner is so it can be exported into the scene file for placement in game
// capture current size
var height = psd.height.value;
var width = psd.width.value;
var top = psd.height.value;
var left = psd.width.value;
// trim off the top and left
psd.trim(TrimType.TRANSPARENT, true, true, false, false);
// the difference between original and trimmed is the amount of offset
top -= psd.height.value;
left -= psd.width.value;
// trim the right and bottom
psd.trim(TrimType.TRANSPARENT);
// find center
top += (psd.height.value / 2)
left += (psd.width.value / 2)
// unity needs center of image, not top left
top = -(top - (height / 2));
left -= (width / 2);
height = psd.height.value;
width = psd.width.value;
psd.close(SaveOptions.DONOTSAVECHANGES);
return {
y: top,
x: left,
width: width,
height: height
};
}
function saveScenePng(psd, fileName, writeToDisk,notMerge)
{
// we should now have a single art layer if all went well
if(!notMerge)
{
psd.mergeVisibleLayers();
}
// figure out where the top-left corner is so it can be exported into the scene file for placement in game
// capture current size
var height = psd.height.value;
var width = psd.width.value;
var top = psd.height.value;
var left = psd.width.value;
// trim off the top and left
psd.trim(TrimType.TRANSPARENT, true, true, false, false);
// the difference between original and trimmed is the amount of offset
top -= psd.height.value;
left -= psd.width.value;
// trim the right and bottom
psd.trim(TrimType.TRANSPARENT);
// find center
top += (psd.height.value / 2)
left += (psd.width.value / 2)
// unity needs center of image, not top left
top = -(top - (height / 2));
left -= (width / 2);
height = psd.height.value;
width = psd.width.value;
var rec = {
y: top,
x: left,
width: width,
height: height
};
// save the scene data
if(!notMerge){
sceneData += "";
sceneData += "" + rec.x + "";
sceneData += "" + rec.y + "";
sceneData += "";
sceneData += "";
sceneData += "" + rec.width + "";
sceneData += "" + rec.height + "";
sceneData += "";
}
if (writeToDisk)
{
// save the image
var pngFile = new File(destinationFolder + "/" + fileName + ".png");
var pngSaveOptions = new PNGSaveOptions();
psd.saveAs(pngFile, pngSaveOptions, true, Extension.LOWERCASE);
}
psd.close(SaveOptions.DONOTSAVECHANGES);
}
function makeValidFileName(fileName)
{
var validName = fileName.replace(/^\s+|\s+$/gm, ''); // trim spaces
//删除九宫格关键字符
validName = validName.replace(/\s*_9S(\:\d+)+/g,"")
validName = validName.replace(/[\\\*\/\?:"\|<>]/g, ''); // remove characters not allowed in a file name
validName = validName.replace(/[ ]/g, '_'); // replace spaces with underscores, since some programs still may have troubles with them
if (validName.match("Common") || validName.match("Global"))
{
validName = validName.substring (0,validName.lastIndexOf ("@")); //截取@之后的字符串作为图片的名称。
}
else if(!sourcePsdName.match("Common") || !sourcePsdName.match("Global")) // 判断是否为公用的PSD素材文件,如果不是,则自动为图片增加后缀,防止重名。 公用psd文件的图片层不允许重名。
{
validName += "_" + uuid++;
}
$.writeln(validName);
return validName;
}
/***************************************************************************************************************************************************************************************************************/
//对称的图片处理,切一半
//2017.01.10
//by zs
// 裁切 基于透明像素
function trim(doc){
doc.trim(TrimType.TRANSPARENT,true,true,true,true);
}
// 裁剪左半部分
function cutLeftHalf(doc,layerName){
doc.mergeVisibleLayers();
trim(doc);
var _obj = doc.activeLayer
var width = doc.width;
var height = doc.height;
var side = width / 2;
var region = Array(Array(0,height),Array(0,0),Array(side,0),Array(side,height));
var selectRect = doc.selection.select(region);
doc.selection.copy();
var newStem = doc.paste();
newStem.name = layerName;
var deltaX = 0;
var deltaY = 0;
if(region[0][0] != 0){
deltaX = -(width - side*2);
}
newStem.translate(deltaX,deltaY);
_obj.visible = false;
trim(doc);
saveScenePng(doc, layerName, true,true);
// exportHalfImage(doc,"LeftHalf");
}
// 裁剪下半部分
function cutBottomHalf(doc,layerName){
doc.mergeVisibleLayers();
trim(doc);
var _obj = doc.activeLayer
var width = doc.width;
var height = doc.height;
var side = height / 2;
//var region = Array(Array(0,side),Array(0,0),Array(width,0),Array(width,side));
var region = Array(Array(0,height),Array(0,side),Array(width,side),Array(width,height));
var selectRect = doc.selection.select(region);
doc.selection.copy();
var newStem = doc.paste();
newStem.name = layerName;
var deltaX = 0;
var deltaY = 0;
if (region[0][1] != side){
deltaY = -(height - side*2);
}
newStem.translate(deltaX,deltaY);
_obj.visible = false;
trim(doc);
saveScenePng(doc, layerName, true,true);
//exportHalfImage(doc,"UpHalf");
}
// 裁剪左下四分之一
function cutQuarter(doc,layerName){
doc.mergeVisibleLayers();
trim(doc);
var _obj = doc.activeLayer
var width = doc.width;
var height = doc.height;
var side = height / 2;
var region = Array(Array(0,height),Array(0,height / 2),Array(width / 2,height / 2),Array(width / 2,height));
var selectRect = doc.selection.select(region);
doc.selection.copy();
var newStem = doc.paste();
newStem.name = layerName;
var deltaX = 0;
var deltaY = 0;
if (region[0][1] != side){
deltaY = -(height - side*2);
}
newStem.translate(deltaX,deltaY);
_obj.visible = false;
trim(doc);
saveScenePng(doc, layerName, true,true);
}
function exportHalfImage(psd,halfType)
{
hideAllLayers(psd);
var layerName = "";
for (var i = psd.layers.length - 1; 0 <= i; i--)
{
layerName = psd.layers[i].name;
if(layerName.match(halfType))
{
psd.layers[i].visible = true;
saveScenePng(psd, layerName, true,true);
}
}
}
/***************************************************************************************************************************************************************************************************************/
//九宫格切图
//2017.01.13
//by HuangLang
function _9sliceCutImg(doc,layerName,vaildName){
// 创建图层组
var _obj = doc.activeLayer
var stemGroup = doc.layerSets.add();
stemGroup.name = layerName
// _obj.move(stemGroup,ElementPlacement.PLACEATEND)
doc.mergeVisibleLayers();
trim(doc);
var width = doc.width;
var height = doc.height;
var re = /\s*_9S(\:\d+)+/g;
var getStr = ""
var result = layerName.match(re)
if (result) {
getStr = result[0]
}else{
alert("图层名为:"+layerName+"的九宫格格式不对!应为_9S:XX或:XX:XX:XX:XX");
return;
}
var nums = getStr.split(":")
if ( nums.length == 2) {
for(var j = 0;j";
sceneData += "" + sliceOriArr[0] + "";
sceneData += "" + sliceOriArr[1] + "";
sceneData += "" + sliceOriArr[2] + "";
sceneData += "" + sliceOriArr[3] + "";
sceneData += "";
trim(doc);
saveScenePng(doc, vaildName, true,true);
}