PS 24.0.0脚本:一键实现老照片修复与上色!
# Photoshop 老照片修复与上色脚本 (PS 24.0.0) 以下是一个完整的Photoshop脚本(JavaScript),用于自动化老照片修复和上色流程: ```javascript // Photoshop 老照片修复与上色脚本 // 适用于PS 24.0.0版本 // 启用严格模式 "use strict"; // 主函数 function main() { // 检查是否有打开的文档 if (!app.documents.length) { alert("请先打开要修复的照片"); return; } // 保存原始文档状态 var originalDoc = app.activeDocument; var originalLayer = originalDoc.activeLayer; try { // 第一步:创建修复副本 var workingLayer = originalLayer.duplicate(); workingLayer.name = "修复层"; // 第二步:自动去除灰尘和划痕 removeDustAndScratches(workingLayer); // 第三步:增强对比度 enhanceContrast(workingLayer); // 第四步:自动上色 autoColorize(workingLayer); // 第五步:最终调整 finalAdjustments(workingLayer); // 合并可见图层并保留原始 var mergedLayer = originalDoc.mergeVisibleLayers(); mergedLayer.name = "修复结果"; originalLayer.visible = true; alert("老照片修复与上色完成!"); } catch (e) { alert("脚本执行出错: " + e.message); } } // 去除灰尘和划痕 function removeDustAndScratches(layer) { // 应用表面模糊减少噪点 var desc = new ActionDescriptor(); desc.putEnumerated(charIDToTypeID("Pres"), charIDToTypeID("PrSt"), stringIDToTypeID("surfaceBlur")); desc.putUnitDouble(charIDToTypeID("Rds "), charIDToTypeID("#Pxl"), 5); desc.putUnitDouble(charIDToTypeID("Thsh"), charIDToTypeID("#Prc"), 15); executeAction(charIDToTypeID("setd"), desc, DialogModes.NO); // 应用减少杂色滤镜 var desc2 = new ActionDescriptor(); desc2.putUnitDouble(charIDToTypeID("strn"), charIDToTypeID("#Prc"), 70); desc2.putBoolean(charIDToTypeID("Prsv"), true); desc2.putBoolean(charIDToTypeID("Rddt"), true); desc2.putUnitDouble(charIDToTypeID("Shrp"), charIDToTypeID("#Prc"), 25); executeAction(charIDToTypeID("Dstr"), desc2, DialogModes.NO); } // 增强对比度 function enhanceContrast(layer) { // 自动色调 executeAction(stringIDToTypeID("autoTone"), undefined, DialogModes.NO); // 应用曲线调整 var curvesAdjustment = new ActionDescriptor(); curvesAdjustment.putEnumerated(charIDToTypeID("CrvA"), charIDToTypeID("ADBE"), charIDToTypeID("CrvA")); var curvesList = new ActionList(); var curvePoint1 = new ActionDescriptor(); curvePoint1.putDouble(charIDToTypeID("Hrzn"), 0); curvePoint1.putDouble(charIDToTypeID("Vrtc"), 0); curvesList.putObject(charIDToTypeID("Crv "), curvePoint1); var curvePoint2 = new ActionDescriptor(); curvePoint2.putDouble(charIDToTypeID("Hrzn"), 255); curvePoint2.putDouble(charIDToTypeID("Vrtc"), 255); curvesList.putObject(charIDToTypeID("Crv "), curvePoint2); var curvePoint3 = new ActionDescriptor(); curvePoint3.putDouble(charIDToTypeID("Hrzn"), 128); curvePoint3.putDouble(charIDToTypeID("Vrtc"), 140); curvesList.putObject(charIDToTypeID("Crv "), curvePoint3); curvesAdjustment.putList(charIDToTypeID("Crv "), curvesList); executeAction(charIDToTypeID("Crvs"), curvesAdjustment, DialogModes.NO); } // 自动上色 function autoColorize(layer) { // 转换为智能对象以保留编辑能力 executeAction(stringIDToTypeID("convertToSmartObject"), undefined, DialogModes.NO); // 应用神经网络滤镜进行自动上色 try { var desc = new ActionDescriptor(); desc.putString(stringIDToTypeID("filterName"), "colorize"); desc.putBoolean(stringIDToTypeID("filterEnabled"), true); executeAction(stringIDToTypeID("neuralFilter"), desc, DialogModes.NO); } catch (e) { // 如果神经网络滤镜不可用,使用传统方法 traditionalColorize(layer); } } // 传统上色方法 function traditionalColorize(layer) { // 创建色相/饱和度调整层 var hueSaturation = new ActionDescriptor(); hueSaturation.putEnumerated(charIDToTypeID("HStr"), charIDToTypeID("HSt2"), charIDToTypeID("Mstr")); hueSaturation.putBoolean(charIDToTypeID("Clrz"), true); executeAction(charIDToTypeID("HStr"), hueSaturation, DialogModes.NO); // 为不同区域添加颜色 // 这里可以添加更多特定区域的上色逻辑 } // 最终调整 function finalAdjustments(layer) { // 轻微锐化 var desc = new ActionDescriptor(); desc.putEnumerated(charIDToTypeID("Usng"), charIDToTypeID("Shrp"), charIDToTypeID("LF")); executeAction(charIDToTypeID("Shrp"), desc, DialogModes.NO); // 添加轻微晕影效果 var desc2 = new ActionDescriptor(); var desc3 = new ActionDescriptor(); desc3.putUnitDouble(charIDToTypeID("Amnt"), charIDToTypeID("#Prc"), -15); desc3.putUnitDouble(charIDToTypeID("Midp"), charIDToTypeID("#Prc"), 50); desc3.putUnitDouble(charIDToTypeID("Rndn"), charIDToTypeID("#Prc"), 0); desc3.putUnitDouble(charIDToTypeID("Hghl"), charIDToTypeID("#Prc"), 0); desc2.putObject(charIDToTypeID("Lns "), charIDToTypeID("Lns "), desc3); executeAction(charIDToTypeID("Lnse"), desc2, DialogModes.NO); } // 执行主函数 main(); ``` ## 使用说明 1. 将上述代码保存为`.jsx`文件 2. 在Photoshop中通过"文件 > 脚本 > 浏览"来运行此脚本 3. 确保已打开要修复的老照片 ## 脚本功能说明 1. 自动去除照片上的灰尘和细小划痕 2. 智能增强对比度使图像更清晰 3. 使用PS 24.0.0的神经网络滤镜自动上色 4. 如果神经网络滤镜不可用,会回退到传统上色方法 5. 最终进行锐化和晕影等微调 ## 注意事项 1. 对于严重损坏的照片,可能仍需手动修复关键区域 2. 上色效果取决于原始照片的质量和内容 3. 脚本会保留原始图层,所有修改都在副本上进行 ######[AI写代码神器 | 1696点数解答 | 2025-04-09 16:41:29]
- PS 24.7.0 脚本:轻松修复曝光过度照片,附实用注意事项! (字节豆包 | 166点数解答 | 2025-04-30 10:13:32)247
- PS 24.7.0专用脚本:一键修复曝光过度照片(附代码及注意要点) (阿里通义 | 585点数解答 | 2025-04-30 10:15:33)255
- MATLAB代码实现原材料切割优化:计算最优切割方案与最小成本(字节豆包 | 3226点数解答 | 2025-06-18 20:59:55)216
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)369
- Python 程序验证 20 亿内偶数:哥德巴赫猜想素数分解实现(字节豆包 | 209点数解答 | 2024-11-03 15:07:33)404
- C语言验证20亿内偶数:揭秘哥德巴赫猜想的素数分解(GPT | 1072点数解答 | 2024-11-03 15:08:20)271
- C 语言实现:验证 20 亿内偶数分解为两素数之和,输出最小 p 解(字节豆包 | 265点数解答 | 2024-11-06 12:05:03)281
- C语言验证20亿内偶数:用代码解开哥德巴赫猜想素数分解之谜(讯飞星火 | 794点数解答 | 2024-11-06 12:06:41)478
- C语言程序:验证20亿内偶数分解为最小素数和,附代码揭秘! (GPT | 287点数解答 | 2024-11-06 12:06:42)283
- Python程序:验证20亿内偶数分解为最小素数对,证实哥德巴赫猜想!(阿里通义 | 667点数解答 | 2024-11-11 19:20:44)463
- Python 程序验证 20 亿内偶数:哥德巴赫猜想素数分解求解(字节豆包 | 210点数解答 | 2024-11-15 00:26:05)466
- C语言实战:验证20亿内偶数的哥德巴赫猜想分解(字节豆包 | 206点数解答 | 2024-11-15 00:27:23)250