参考
在成功使用
deepseek+豆包+kimi = ppt
deepseek+vscode 代码助手(自动写代码,原项目自带验证和热启动,未加入单元测试)
deepseek+canvas可画 = 海报
之后准备尝试一下deepseek+ps自动化脚本修图~
首先在deepseek里要求photoshop的脚本代码:
提问:写一个photoshop的脚步,用于复制一个图层,抠图去掉背景,photoshop版本2020
然后deepseek经过深度思考🤔给出了代码:
// Photoshop 2020专用抠图脚本
// Save as "CopyAndRemoveBG.jsx"
#target photoshop
try {
// 检查文档状态
if (app.documents.length < 1) {
throw new Error("请先打开图像文件");
}
var doc = app.activeDocument;
var originalLayer = doc.activeLayer;
// 创建副本图层
var copiedLayer = originalLayer.duplicate();
copiedLayer.name = originalLayer.name + "_抠图版";
// 执行智能选区(兼容2020版)
if (doc.selection && typeof doc.selection.selectSubject === 'function') {
doc.selection.selectSubject(); // 2020版支持的核心AI功能
} else {
// 备用选区方案
app.runMenuItem(stringIDToID('autoSelectionTool')); // 触发自动选择工具
}
// 选区优化设置
doc.selection.contract(1); // 收缩1像素
doc.selection.feather(0.8); // 羽化0.8像素
// 添加图层蒙版
var maskResult = copiedLayer.addMask();
// 转换为透明背景
doc.selection.invert();
copiedLayer.applyMask(maskResult); // 应用蒙版
doc.selection.deselect();
// 结果提示
alert("抠图完成!已创建新图层: " + copiedLayer.name);
} catch(e) {
alert("执行错误: " + e.message + "\n行号: " + e.line);
}
还提示了 我要保存成jsx文件,并ps打开图片“文件-脚本-浏览”选脚本文件打开即可。
本来😏
按照以上步骤运行代码,ps报错,显示stringIDToID不是函数
于是我在deepseek中继续提问报错该如何解决……
然而,deepseek一贯的神回复来了🐑
多次操作无果
……
转向豆包编程助手
包包很快给出了修正的代码
try {
// 获取当前活动文档
var doc = app.activeDocument;
// 获取当前选中的图层
var currentLayer = doc.activeLayer;
// 确保当前图层不是背景图层,因为背景图层不能直接编辑
if (currentLayer.kind == LayerKind.BACKGROUND) {
currentLayer = currentLayer.duplicate(); // 复制背景图层以使其成为普通图层
doc.activeLayer = currentLayer; // 激活新复制的图层
}
// 选择当前图层的所有像素
currentLayer.select();
// 创建一个新的图层蒙版
var layerMask = currentLayer.addVectorMask();
// 使用魔术棒工具选择背景(假设背景是单一颜色或易于选择的)
// 由于直接用 getByName 可能在某些环境有问题,这里使用字符串 ID 操作
var magicWandDesc = new ActionDescriptor();
var magicWandRef = new ActionReference();
magicWandRef.putString(stringIDToID("tool"), stringIDToID("magicWandTool"));
magicWandDesc.putReference(stringIDToID("null"), magicWandRef);
executeAction(stringIDToID("selectTool"), magicWandDesc, DialogModes.NO);
// 设置魔术棒工具参数
var tolerance = 32; // 设置容差以适应背景颜色的变化
var contiguous = true; // 只选择连续区域
var selectDesc = new ActionDescriptor();
selectDesc.putUnitDouble(stringIDToID("tolerance"), stringIDToID("unitless"), tolerance);
selectDesc.putBoolean(stringIDToID("contiguous"), contiguous);
executeAction(stringIDToID("magicWand"), selectDesc, DialogModes.NO);
// 反转选择,以便选择前景而不是背景
doc.selection.invert();
// 将选择应用于图层蒙版
var path = doc.pathItems.add();
var points = [];
var bounds = doc.selection.bounds;
points.push({ anchor: [bounds[0], bounds[1]], leftDirection: [bounds[0], bounds[1]], rightDirection: [bounds[0], bounds[1]] });
points.push({ anchor: [bounds[2], bounds[1]], leftDirection: [bounds[2], bounds[1]], rightDirection: [bounds[2], bounds[1]] });
points.push({ anchor: [bounds[2], bounds[3]], leftDirection: [bounds[2], bounds[3]], rightDirection: [bounds[2], bounds[3]] });
points.push({ anchor: [bounds[0], bounds[3]], leftDirection: [bounds[0], bounds[3]], rightDirection: [bounds[0], bounds[3]] });
path.points = points;
path.closed = true;
layerMask.initFromPath(path);
path.remove();
// 清除选择
doc.selection.deselect();
// 保存文档(可选)
// doc.saveAs(new File("/path/to/save/your/image.png"), SaveOptions.PNG, true);
alert("抠图并删除背景完成!");
} catch (e) {
alert('过程中:' + e.message);
}
再次尝试
……
然后又试了多次,经过createMask,addMask不是函数,stringIDToID自定义函数报非法参数,charIDToTypeID非法参数
等等~
期间deepseek短暂walkup,给了个修正案:
// Photoshop 2020兼容版抠图脚本
// 保存为"CopyAndRemoveBG_PS2020.jsx"
#target photoshop
try {
// ========== 初始化检查 ==========
if (app.documents.length < 1) {
throw new Error("请打开一个图像文件");
}
var doc = app.activeDocument;
var originalLayer = doc.activeLayer;
// ========== 创建副本图层 ==========
var idDplc = charIDToTypeID("Dplc");
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID("null"), charIDToTypeID("Lyr "), originalLayer);
executeAction(idDplc, desc, DialogModes.NO);
var copiedLayer = doc.activeLayer;
copiedLayer.name = originalLayer.name + "_抠图版";
// ========== 智能选区核心逻辑 ==========
if (typeof doc.selection.selectSubject === 'function') {
// PS2020支持的AI选择主体
doc.selection.selectSubject();
} else {
// 传统自动选区方案
var idAuto = charIDToTypeID("AuTl"); // 自动选择工具
var desc = new ActionDescriptor();
desc.putEnumerated(charIDToTypeID("TlFn"), charIDToTypeID("TlFn"), idAuto);
executeAction(charIDToTypeID("Slct"), desc, DialogModes.NO);
}
// ========== 选区优化 ==========
doc.selection.contract(1); // 收缩1像素
doc.selection.feather(0.8); // 羽化0.8像素
// ========== 创建蒙版 ==========
var idMk = charIDToTypeID("Mk ");
var desc = new ActionDescriptor();
desc.putClass(charIDToTypeID("Nw "), charIDToTypeID("Chnl"));
desc.putEnumerated(charIDToTypeID("At "), charIDToTypeID("Chnl"), charIDToTypeID("Msk "));
executeAction(idMk, desc, DialogModes.NO);
// ========== 清理选区 ==========
doc.selection.deselect();
// ========== 消除边缘杂色 ==========
var idDfrn = charIDToTypeID("Dfrn");
var desc = new ActionDescriptor();
desc.putUnitDouble(charIDToTypeID("Rds "), charIDToTypeID("#Pxl"), 1);
executeAction(idDfrn, desc, DialogModes.NO);
alert("操作成功!已创建抠图层:" + copiedLayer.name);
} catch(e) {
alert("错误发生在行:" + e.line + "\n错误信息:" + e.message);
}
依旧报错,追问,再次服务繁忙……
不知道有没有人操作成功