Javascript เพื่อทำให้พา ธ ไปยังเลเยอร์โดยอัตโนมัติใน Photoshop


1

ฉันกำลังมองหาจาวาสคริปต์ที่สามารถเรียกใช้ภายใน Photoshop ตามหลักการแล้วสคริปต์จะแปลงชุดของรูปวาดเส้นทางเป็นเลเยอร์ - จากนั้นเติมเลเยอร์ (กำหนดโดยเส้นทางของรูปวาด) ด้วยสีดำ ถ้าเป็นไปได้ฉันต้องการให้เลเยอร์รักษาชื่อของเส้นทางการคลิปและให้เลเยอร์ปรากฏตามลำดับเช่นเดียวกับเส้นทางการคลิป ตัวอย่างเช่นถ้าเส้นทางการตัดแรกชื่อ "ประตู" ฉันต้องการให้เลเยอร์ 1 เป็นส่วนประตู ... และเพื่อให้เรียกว่า "ประตู" นอกจากนี้จะเป็นการดีถ้ามีตัวเลือกให้เติมด้วยสีดำ ดังนั้นเลเยอร์ "ประตู" จะมีการเลือกประตูที่เต็มไปด้วยสีดำและทุกอย่างอื่นจะโปร่งใส

ใครช่วยได้บ้าง

// Create solid fills based on paths array

// hex value: FFFFFF is white, FF0000 is red, and so on.
var color = "000000";
var paths = app.activeDocument.pathItems;
var pathsLength = paths.length;
var newLayers = [];

// create solid fill layers
for(var i = 0; i < pathsLength; i++)
{
   selectPath(paths[i].name);
   createFill(color);
   var fill = app.activeDocument.activeLayer;
   fill.name = paths[i].name;
   newLayers.push(app.activeDocument.activeLayer);
}

/*
// combine shapes
for(var i = 0; i < newLayers.length; i++)
{
   app.activeDocument.activeLayer = newLayers[i];
   selectPath(newLayers[i].name + " Shape Path");
   combineShapes();
}
*/

// select path by name
function selectPath(name)
{
   var idslct = charIDToTypeID( "slct" );
   var desc50 = new ActionDescriptor();
   var idnull = charIDToTypeID( "null" );
   var ref34 = new ActionReference();
   var idPath = charIDToTypeID( "Path" );
   ref34.putName( idPath, name );
   desc50.putReference( idnull, ref34 );
   executeAction( idslct, desc50, DialogModes.NO );
};

// create solid fill based on selected path items
function createFill(hexValue)
{
   var color = new SolidColor();
   color.rgb.hexValue = hexValue != undefined ?  hexValue : "000000";

   var idMk = charIDToTypeID( "Mk  " );
   var desc51 = new ActionDescriptor();
   var idnull = charIDToTypeID( "null" );
   var ref35 = new ActionReference();
   var idcontentLayer = stringIDToTypeID( "contentLayer" );
   ref35.putClass( idcontentLayer );
   desc51.putReference( idnull, ref35 );
   var idUsng = charIDToTypeID( "Usng" );
   var desc52 = new ActionDescriptor();
   var idType = charIDToTypeID( "Type" );
   var desc53 = new ActionDescriptor();
   var idClr = charIDToTypeID( "Clr " );
   var desc54 = new ActionDescriptor();
   var idRd = charIDToTypeID( "Rd  " );
   desc54.putDouble( idRd, color.rgb.red );
   var idGrn = charIDToTypeID( "Grn " );
   desc54.putDouble( idGrn, color.rgb.green );
   var idBl = charIDToTypeID( "Bl  " );
   desc54.putDouble( idBl, color.rgb.blue );
   var idRGBC = charIDToTypeID( "RGBC" );
   desc53.putObject( idClr, idRGBC, desc54 );
   var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
   desc52.putObject( idType, idsolidColorLayer, desc53 );
   var idcontentLayer = stringIDToTypeID( "contentLayer" );
   desc51.putObject( idUsng, idcontentLayer, desc52 );
   executeAction( idMk, desc51, DialogModes.NO );
};

// select color fill items and combine shapes
function combineShapes()
{
   var idslct = charIDToTypeID( "slct" );
   var desc55 = new ActionDescriptor();
   var idnull = charIDToTypeID( "null" );
   var ref36 = new ActionReference();
   var idPath = charIDToTypeID( "Path" );
   var idPath = charIDToTypeID( "Path" );
   var idvectorMask = stringIDToTypeID( "vectorMask" );
   ref36.putEnumerated( idPath, idPath, idvectorMask );
   var idLyr = charIDToTypeID( "Lyr " );
   var idOrdn = charIDToTypeID( "Ordn" );
   var idTrgt = charIDToTypeID( "Trgt" );
   ref36.putEnumerated( idLyr, idOrdn, idTrgt );
   desc55.putReference( idnull, ref36 );
   executeAction( idslct, desc55, DialogModes.NO );
};


เดิมทีฉันกำลังวางแผนที่จะใช้การกระทำ อย่างไรก็ตามฉันไม่สามารถหาวิธีที่จะให้ชื่อเส้นทางกลายเป็นชื่อเลเยอร์ได้ นอกจากนี้ฉันกำลังมองหาบางอย่างที่สามารถแปลงหลายพา ธ เป็นเลเยอร์ในไม่กี่วินาที ขอบคุณสำหรับการตอบกลับของคุณ ลิงค์ที่สองมีประโยชน์เพราะฉันพบสคริปต์ที่ส่งออกเลเยอร์ไปยัง PNG นั้นค่อนข้างมีประโยชน์ อย่างไรก็ตามนั่นไม่ได้แก้ปัญหาของฉัน
ary bryan

ฉันมีทางออกและได้เพิ่มรหัสด้านบนสำหรับทุกคนที่กำลังมองหาคำตอบ
ary bryan

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.