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比例图片";
        }
        
        // 转换为智能对象以保持质量
        if (doc.activeLayer.isBackgroundLayer) {
            doc.activeLayer.isBackgroundLayer = false;
        }
        doc.activeLayer.duplicate().name = "Original";
        doc.activeLayer = doc.layers.getByName("Original");
        executeAction(stringIDToTypeID("newPlacedLayer")); // 转换为智能对象
        
        // 调整尺寸为192x192
        doc.resizeImage(
            192, 
            192, 
            null, 
            ResampleMethod.BICUBICSHARPER
        );
        
        // 添加自然饱和度调整
        var vibranceDesc = new ActionDescriptor();
        vibranceDesc.putEnumerated(
            charIDToTypeID("PresetKind"), 
            charIDToTypeID("PrsK"), 
            charIDToTypeID("PrsLCustom")
        );
        vibranceDesc.putInteger(charIDToTypeID("Vibr"), 50); // 自然饱和度值
        
        // 创建调整图层
        var layerRef = new ActionReference();
        layerRef.putClass(charIDToTypeID("AdjL"));
        var layerDesc = new ActionDescriptor();
        layerDesc.putReference(charIDToTypeID("Null"), layerRef);
        layerDesc.putObject(charIDToTypeID("Usng"), charIDToTypeID("Vibr"), vibranceDesc);
        executeAction(charIDToTypeID("Mk  "), layerDesc, DialogModes.NO);
        
        // 拼合图像
        doc.flatten();
        
        // 保存设置
        var pngOptions = new PNGSaveOptions();
        pngOptions.compression = 9; // 最高压缩质量
        pngOptions.interlaced = false;
        
        // 构建输出路径
        var outputFile = new File(outputFolder.fsName + "/" + file.name);
        
        // 保存为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