以下是一个用于批量替换智能对象并支持多种导出格式、缩放样式和九宫格对齐方式的 Photoshop 脚本: ```javascript // 定义主函数 function batchReplaceSmartObject() { // 检查是否有打开的文档 if (documents.length === 0) { alert("没有打开的文档,请先打开一个文档。"); return; } // 获取当前活动文档 var doc = app.activeDocument; // 查找名为 "UI" 的智能对象图层 var uiLayer; for (var i = 0; i < doc.layers.length; i++) { if (doc.layers[i].name === "UI" && doc.layers[i].kind === LayerKind.ARTOBJECT) { uiLayer = doc.layers[i]; break; } } // 如果未找到名为 "UI" 的智能对象图层,给出提示 if (!uiLayer) { alert('未找到名为 "UI" 的智能对象图层。'); return; } // 选择要替换的图像文件夹 var folder = Folder.selectDialog("选择要替换的图像文件夹"); if (!folder) return; // 获取文件夹中的所有图像文件 var files = folder.getFiles(); files = files.filter(function (file) { return /\.(jpg|jpeg|png|psd)$/i.test(file.name); }); // 选择导出文件夹 var exportFolder = Folder.selectDialog("选择导出文件夹"); if (!exportFolder) return; // 选择缩放样式 var scaleStyles = ["四周顶格", "短边适应", "长边适应", "保持原样"]; var scaleStyle = String(prompt("请选择缩放样式:\n1. 四周顶格\n2. 短边适应\n3. 长边适应\n4. 保持原样", "1")); scaleStyle = scaleStyles[parseInt(scaleStyle) - 1]; // 选择九宫格对齐方式 var alignments = ["左上", "上中", "右上", "左中", "居中", "右中", "左下", "下中", "右下"]; var alignment = String(prompt("请选择九宫格对齐方式:\n1. 左上\n2. 上中\n3. 右上\n4. 左中\n5. 居中\n6. 右中\n7. 左下\n8. 下中\n9. 右下", "5")); alignment = alignments[parseInt(alignment) - 1]; // 遍历图像文件进行替换和导出 for (var j = 0; j < files.length; j++) { var file = files[j]; // 替换智能对象 var desc = new ActionDescriptor(); var ref = new ActionReference(); ref.putIdentifier(charIDToTypeID('Lyr '), uiLayer.id); desc.putReference(charIDToTypeID('null'), ref); desc.putPath(stringIDToTypeID('fileName'), file); executeAction(stringIDToTypeID('placedLayerReplaceContents'), desc, DialogModes.NO); // 应用缩放样式 applyScaleStyle(uiLayer, scaleStyle, doc.width, doc.height); // 应用九宫格对齐方式 applyAlignment(uiLayer, alignment, doc.width, doc.height); // 导出为不同格式 exportDocument(doc, exportFolder, file.name); } } // 应用缩放样式的函数 function applyScaleStyle(layer, style, docWidth, docHeight) { var bounds = layer.bounds; var layerWidth = bounds[2] - bounds[0]; var layerHeight = bounds[3] - bounds[1]; var scaleX, scaleY; switch (style) { case "四周顶格": scaleX = docWidth / layerWidth; scaleY = docHeight / layerHeight; break; case "短边适应": var scale = Math.min(docWidth / layerWidth, docHeight / layerHeight); scaleX = scaleY = scale; break; case "长边适应": var scale = Math.max(docWidth / layerWidth, docHeight / layerHeight); scaleX = scaleY = scale; break; case "保持原样": scaleX = scaleY = 1; break; } app.activeDocument.selection.select(layer.bounds); app.activeDocument.transform.scale(scaleX * 100, scaleY * 100); app.activeDocument.selection.deselect(); } // 应用九宫格对齐方式的函数 function applyAlignment(layer, alignment, docWidth, docHeight) { var bounds = layer.bounds; var layerWidth = bounds[2] - bounds[0]; var layerHeight = bounds[3] - bounds[0]; var newLeft, newTop; switch (alignment) { case "左上": newLeft = 0; newTop = 0; break; case "上中": newLeft = (docWidth - layerWidth) / 2; newTop = 0; break; case "右上": newLeft = docWidth - layerWidth; newTop = 0; break; case "左中": newLeft = 0; newTop = (docHeight - layerHeight) / 2; break; case "居中": newLeft = (docWidth - layerWidth) / 2; newTop = (docHeight - layerHeight) / 2; break; case "右中": newLeft = docWidth - layerWidth; newTop = (docHeight - layerHeight) / 2; break; case "左下": newLeft = 0; newTop = docHeight - layerHeight; break; case "下中": newLeft = (docWidth - layerWidth) / 2; newTop = docHeight - layerHeight; break; case "右下": newLeft = docWidth - layerWidth; newTop = docHeight - layerHeight; break; } layer.translate(newLeft - bounds[0], newTop - bounds[1]); } // 导出文档为不同格式的函数 function exportDocument(doc, exportFolder, fileName) { var baseName = fileName.replace(/\.\w+$/, ''); // 导出为 PNG var pngFile = new File(exportFolder + '/' + baseName + '.png'); var pngSaveOptions = new PNGSaveOptions(); pngSaveOptions.compression = 0; doc.saveAs(pngFile, pngSaveOptions, true, Extension.LOWERCASE); // 导出为 JPG var jpgFile = new File(exportFolder + '/' + baseName + '.jpg'); var jpgSaveOptions = new JPEGSaveOptions(); jpgSaveOptions.quality = 12; doc.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE); // 导出为 PSD var psdFile = new File(exportFolder + '/' + baseName + '.psd'); var psdSaveOptions = new PhotoshopSaveOptions(); psdSaveOptions.embedColorProfile = true; psdSaveOptions.layers = true; doc.saveAs(psdFile, psdSaveOptions, true, Extension.LOWERCASE); } // 调用主函数 batchReplaceSmartObject(); ``` 使用方法 1. 打开 Photoshop:确保你已经打开了包含名为 "UI" 的智能对象图层的文档。 2. 运行脚本:在 Photoshop 中,选择 `文件` -> `脚本` -> `浏览`,然后选择上述脚本文件并运行。 3. 选择图像文件夹:脚本会提示你选择要替换的图像文件夹,选择包含你想要替换智能对象的图像的文件夹。 4. 选择导出文件夹:选择导出替换后文档的文件夹。 5. 选择缩放样式:根据提示输入数字选择缩放样式(1 - 4)。 6. 选择九宫格对齐方式:根据提示输入数字选择九宫格对齐方式(1 - 9)。 7. 等待处理完成:脚本会自动替换智能对象,应用缩放样式和对齐方式,并导出为 PNG、JPG 和 PSD 格式。 额外注意的逻辑点 1. 确保要替换的图像文件夹中只包含图像文件,否则可能会出现错误。 2. 要替换的智能对象图层名必须为 "UI",且为智能对象类型,否则脚本会提示未找到该图层。 3. 输入缩放样式和九宫格对齐方式时,确保输入的是有效的数字,否则可能会导致选择错误。 [2025-07-15 08:58:15 | AI写代码神器 | 2044点数解答]