﻿
贴图换图()
function 贴图换图() {
    建立快照();
    var folder = Folder.selectDialog("请选择一个文件夹");
    var 模特文档 = app.activeDocument;
    
    if (folder) {
        // 在选择的文件夹中创建一个新的子文件夹
        var targetFolder = new Folder(folder.fullName + "/贴图生成");
        if (!targetFolder.exists) {
            targetFolder.create();
        }

        var fileNames = [];
        var files = folder.getFiles();

        // 获取文件夹中的所有文件名
        for (var i = 0; i < files.length; i++) {
            if (files[i] instanceof File) {
                fileNames.push(files[i].name);
            }
        }

        // 获取“贴图位置”图层组中的所有图层名称
        var layerSet = 模特文档.layerSets.getByName("贴图位置");
        var layerNames = [];
        for (var j = 0; j < layerSet.artLayers.length; j++) {
            layerNames.push(layerSet.artLayers[j].name);
        }

        // 遍历“贴图位置”图层组中的每个图层
        for (var k = 0; k < layerNames.length; k++) {
            var layname = layerNames[k];
            var 贴图位置 = app.activeDocument.layerSets.getByName("贴图位置").layers.getByName(layname);
            app.activeDocument.activeLayer = 贴图位置;

            // 依次调取文件夹中的文件
            if (k < fileNames.length) {
                var file = new File(folder + "/" + fileNames[k]);
                if (file.exists) {
                    try {
                        app.open(file);
                        app.activeDocument.flatten();
                        var 当前文档 = app.activeDocument;
                        var 当前文档名称 = 当前文档.name;
                        预设图案(当前文档名称);  // 需要自定义实现
                        app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
                        app.activeDocument = 模特文档;
                        载入选区();  // 需要自定义实现
                        填充图案(当前文档名称);  // 需要自定义实现
                    } catch (e) {
                        alert("无法打开文件: " + fileNames[k]);
                    }

                    // 保存文件为 TIF 格式
                
                }
                   
            }
                  
        }
     var 当前文档 = app.activeDocument;  // 获取当前文档
    var 当前文档名称 = 当前文档.name;  // 获取当前文档名称（包含扩展名）

    // 去除文件扩展名并添加 ".tif" 后缀
    var 文件名 = 当前文档名称.replace(/\.[^\.]+$/, "") + ".tif";

    // 创建保存路径的 File 对象
    var saveFile = new File(当前文档.path + "/" + 文件名);

    // 设置 Tiff 保存选项
    var tiffSaveOptions = new TiffSaveOptions();
    tiffSaveOptions.imageCompression = TIFFEncoding.NONE;  // 无压缩
    tiffSaveOptions.alphaChannels = true;  // 保留 alpha 通道
    tiffSaveOptions.layers = true;  // 保留图层

    // 另存为 TIF 格式
    当前文档.saveAs(saveFile, tiffSaveOptions, true, Extension.LOWERCASE);
        alert("换图完成");
    }
}


// 其他函数保持不变


function generateRandomNumber(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}



function 图像大小()		//图像大小
    {
 
        var d = new ActionDescriptor();
        d.putUnitDouble(stringIDToTypeID("resolution"), stringIDToTypeID("densityUnit"), 150);
        d.putBoolean(stringIDToTypeID("scaleStyles"), true);
        d.putBoolean(stringIDToTypeID("constrainProportions"), true);
        d.putEnumerated(charIDToTypeID("Intr"), stringIDToTypeID("interpolationType"), stringIDToTypeID("nearestNeighbor"));
        executeAction(stringIDToTypeID("imageSize"), d, DialogModes.NO);
        }





function 取消链接蒙版()	//取消链接蒙版
    {
    
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
        d.putReference(stringIDToTypeID("null"), r);
        var d1 = new ActionDescriptor();
        d1.putBoolean(stringIDToTypeID("userMaskLinked"), false);
        d.putObject(stringIDToTypeID("to"), stringIDToTypeID("layer"), d1);
        executeAction(stringIDToTypeID("set"), d, DialogModes.NO);
     
    }



function 栅格化图层()	//栅格化图层
    {
   
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putEnumerated(stringIDToTypeID("layer"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
        d.putReference(stringIDToTypeID("null"), r);
        executeAction(stringIDToTypeID("rasterizeLayer"), d, DialogModes.NO);

    }





function 预设图案(当前文档名称)	//
    {
    
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putClass(stringIDToTypeID("pattern"));
        d.putReference(stringIDToTypeID("null"), r);
        var r1 = new ActionReference();
        r1.putProperty(stringIDToTypeID("property"), stringIDToTypeID("selection"));
        r1.putEnumerated(stringIDToTypeID("document"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
        d.putReference(stringIDToTypeID("using"), r1);
        d.putString(stringIDToTypeID("name"), 当前文档名称);
        executeAction(stringIDToTypeID("make"), d, DialogModes.NO);
    
    }

function 载入选区()	//载入选区
    {
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putProperty(stringIDToTypeID("channel"), stringIDToTypeID("selection"));
        d.putReference(stringIDToTypeID("null"), r);
        var r1 = new ActionReference();
        r1.putEnumerated(stringIDToTypeID("channel"), stringIDToTypeID("channel"), stringIDToTypeID("transparencyEnum"));
        d.putReference(stringIDToTypeID("to"), r1);
        executeAction(stringIDToTypeID("set"), d, DialogModes.NO);

    }


function 填充图案(当前文档名称)	//
    {
    
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putClass(stringIDToTypeID("contentLayer"));
        d.putReference(stringIDToTypeID("null"), r);
        var d1 = new ActionDescriptor();
        var d2 = new ActionDescriptor();
        var d3 = new ActionDescriptor();
        d3.putString(stringIDToTypeID("name"), 当前文档名称);
      
        d2.putObject(stringIDToTypeID("pattern"), stringIDToTypeID("pattern"), d3);
        d1.putObject(stringIDToTypeID("type"), stringIDToTypeID("patternLayer"), d2);
        d.putObject(stringIDToTypeID("using"), stringIDToTypeID("contentLayer"), d1);
        executeAction(stringIDToTypeID("make"), d, DialogModes.NO);
       
    }


function 位移(水平,垂直)	//位移
    {
   
        var d = new ActionDescriptor();
        d.putInteger(stringIDToTypeID("horizontal"), 水平);
        d.putInteger(stringIDToTypeID("vertical"), 垂直);
        d.putEnumerated(stringIDToTypeID("fill"), stringIDToTypeID("fillMode"), stringIDToTypeID("wrap"));
        executeAction(stringIDToTypeID("offset"), d, DialogModes.NO);
      
    }


function 历史记录回退到快照1()	//
    {
   
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putName(stringIDToTypeID("snapshotClass"), "快照 1");
        d.putReference(stringIDToTypeID("null"), r);
        executeAction(stringIDToTypeID("select"), d, DialogModes.NO);
    
    }

function 建立快照()	//打开
    {
   
        var d = new ActionDescriptor();
        var r = new ActionReference();
        r.putClass(stringIDToTypeID("snapshotClass"));
        d.putReference(stringIDToTypeID("null"), r);
        var r1 = new ActionReference();
        r1.putProperty(stringIDToTypeID("historyState"), stringIDToTypeID("currentHistoryState"));
        d.putReference(stringIDToTypeID("from"), r1);
        executeAction(stringIDToTypeID("make"), d, DialogModes.NO);
      
    }
