SOURCE

// Photoshop批量调整尺寸+自然饱和度脚本(稳定版)
// 保存为 .jsx 文件,通过 Photoshop > 文件 > 脚本 > 浏览 运行

#target photoshop

try {
    // 选择源文件夹
    var inputFolder = Folder.selectDialog("请选择包含PNG图片的文件夹");
    if (!inputFolder) throw "未选择文件夹";
    
    // 创建输出文件夹
    var outputFolder = new Folder(inputFolder.fsName + "/processed");
    if (!outputFolder.exists) outputFolder.create();
    
    // 获取所有PNG文件
    var files = inputFolder.getFiles("*.png");
    if (files.length === 0) throw "未找到PNG文件";
    
    // 保存原始单位设置
    var originalRulerUnits = preferences.rulerUnits;
    preferences.rulerUnits = Units.PIXELS;
    
    // 处理计数器
    var successCount = 0;
    var skipCount = 0;
    
    // 处理每张图片
    for (var i = 0; i < files.length; i++) {
        var file = files[i];
        if (file instanceof File) {
            var result = processImage(file, outputFolder);
            if (result === "success") successCount++;
            else skipCount++;
        }
    }
    
    // 恢复原始单位设置
    preferences.rulerUnits = originalRulerUnits;
    
    alert("处理完成!\n" +
          "成功处理: " + successCount + " 个文件\n" +
          "跳过文件: " + skipCount + " (非1:1比例)\n" +
          "输出位置: " + outputFolder.fsName);
} catch (e) {
    alert("错误: " + e);
}

function processImage(file, outputFolder) {
    var doc;
    try {
        // 打开图片
        doc = open(file);
        
        // 检查是否为1:1比例
        if (Math.abs(doc.width.value - doc.height.value) > 0.1) {
            throw file.name + " 不是1:1比例图片";
        }
        
        // 调整尺寸为192x192
        doc.resizeImage(192, 192, null, ResampleMethod.BICUBICSHARPER);
        
        // ============ 更稳定的自然饱和度调整方法 ============
        // 方法1:使用直接设置(兼容性更好)
        try {
            // 创建新的自然饱和度调整层
            var vibranceLayer = doc.artLayers.add();
            vibranceLayer.kind = LayerKind.ADJUSTMENT;
            vibranceLayer.name = "Vibrance Adjustment";
            
            // 设置自然饱和度值
            var vibrance = new Vibrance();
            vibrance.vibrance = 50; // 自然饱和度值
            vibranceLayer.adjustVibrance = vibrance;
        } catch (e) {
            // 方法1失败时使用备用方法
            // 方法2:通过动作描述符设置
            var desc = new ActionDescriptor();
            var ref = new ActionReference();
            ref.putClass( stringIDToTypeID( "vibrance" ) );
            desc.putReference( stringIDToTypeID( "null" ), ref );
            
            var vibranceDesc = new ActionDescriptor();
            vibranceDesc.putInteger( stringIDToTypeID( "vibrance" ), 50 );
            vibranceDesc.putInteger( stringIDToTypeID( "saturation" ), 0 );
            
            desc.putObject( stringIDToTypeID( "using" ), stringIDToTypeID( "vibrance" ), vibranceDesc );
            executeAction( stringIDToTypeID( "make" ), desc, DialogModes.NO );
        }
        
        // 拼合图像
        doc.flatten();
        
        // 保存设置
        var pngOptions = new PNGSaveOptions();
        pngOptions.compression = 6; // 中等压缩质量(减少错误)
        pngOptions.interlaced = false;
        
        // 构建输出路径(确保文件名合法)
        var outputName = file.name.replace(/\.[^\.]+$/, "_processed.png");
        var outputFile = new File(outputFolder.fsName + "/" + outputName);
        
        // 保存为PNG
        doc.saveAs(outputFile, pngOptions, true);
        
        return "success";
    } catch (e) {
        alert("处理失败: " + file.name + "\n原因: " + e);
        return "skip";
    } finally {
        // 确保关闭文档
        if (doc) doc.close(SaveOptions.DONOTSAVECHANGES);
    }
}
console 命令行工具 X clear

                    
>
console