Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

123
Views
¿Cómo hacer un patrón personalizado a partir de la selección en Photoshop?

TL; DR: quiero usar código para definir un patrón personalizado a partir de la selección en Photoshop usando secuencias de comandos (Extendscript).

Aquí está el código que tengo hasta ahora:

 (function () { var doc = app.activeDocument; // I put 2 guides in the doc to easily get coords for this test var guides = doc.guides; var hGuide = guides[0].coordinate.value; var vGuide = guides[1].coordinate.value; // Select whole doc doc.selection.selectAll(); var sel = doc.selection.bounds; // Get percentages so we can resize the selection var xVal = (hGuide / sel[2].value) * 100; var yVal = (vGuide / sel[3].value) * 100; doc.selection.resizeBoundary(xVal, yVal, AnchorPosition.TOPLEFT); cTID = function (s) { return app.charIDToTypeID(s); }; sTID = function (s) { return app.stringIDToTypeID(s); }; // This part is recorded from an ActionListener var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putClass(cTID('Ptrn')); desc1.putReference(cTID('null'), ref1); var ref2 = new ActionReference(); ref2.putProperty(cTID('Prpr'), sTID("selection")); ref2.putEnumerated(cTID('Dcmn'), cTID('Ordn'), cTID('Trgt')); desc1.putReference(cTID('Usng'), ref2); desc1.putString(cTID('Nm '), "Leaves"); app.executeAction(cTID('Mk '), desc1, DialogModes.NO); })();

Esto se hace manualmente, en la interfaz de usuario, usando una herramienta de marquesina para hacer una selección, luego yendo a Editar > Definir patrón..., ingresando el nombre, luego haciendo clic en Aceptar.

Me grabé haciendo exactamente eso y obtuve un script de acción en Javascript, pero cuando lo ejecuto, Extendscript me dice: "Ocurrió un error general de Photoshop. Es posible que esta funcionalidad no esté disponible en esta versión de Photoshop".

No soy tan hábil cuando se trata de usar ActionDescriptors y ActionReferences, por lo que me encantaría recibir ayuda para definir un patrón personalizado.

¡Gracias de antemano!

**EDITAR:**El código ActionScript funciona cuando hago la selección manualmente, pero cuando uso el código anterior para hacer la selección, no funciona. ¿Por qué habría una diferencia, me pregunto?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

El código funcionó bien para mí. Sin embargo, este tipo de cosas tienden a surgir con las nuevas versiones de Photoshop.

Esta es una posibilidad remota, y no es realmente una respuesta, pero intente reemplazar su código ScriptListener con lo siguiente:

 // ======================================================= var idMk = charIDToTypeID( "Mk " ); var desc26 = new ActionDescriptor(); var idnull = charIDToTypeID( "null" ); var ref10 = new ActionReference(); var idPtrn = charIDToTypeID( "Ptrn" ); ref10.putClass( idPtrn ); desc26.putReference( idnull, ref10 ); var idUsng = charIDToTypeID( "Usng" ); var ref11 = new ActionReference(); var idPrpr = charIDToTypeID( "Prpr" ); var idfsel = charIDToTypeID( "fsel" ); ref11.putProperty( idPrpr, idfsel ); var idDcmn = charIDToTypeID( "Dcmn" ); var idOrdn = charIDToTypeID( "Ordn" ); var idTrgt = charIDToTypeID( "Trgt" ); ref11.putEnumerated( idDcmn, idOrdn, idTrgt ); desc26.putReference( idUsng, ref11 ); var idNm = charIDToTypeID( "Nm " ); desc26.putString( idNm, "Leaves" ); executeAction( idMk, desc26, DialogModes.NO );

Además, es posible que desee pasar una cadena como parámetro a su función, ya que todos los patrones creados se llamarán "hojas".

 var myPatternName = "geometric pattern 4" desc26.putString( idNm, myPatternName ); // was "Leaves"
about 4 years ago · Juan Pablo Isaza Report

0

No estoy seguro de lo que estaba pasando con mi configuración, pero cuando usé la API de Javascript de Ps para hacer una selección, el código se rompió. Pero cuando usé ActionScript para hacer la selección, funcionó. Aquí están las dos funciones que he hecho para seleccionar y luego hacer un patrón a partir de la selección:

 function setSelection(top, left, bottom, right) { var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putProperty(app.charIDToTypeID('Chnl'), app.stringIDToTypeID("selection")); desc1.putReference(app.charIDToTypeID('null'), ref1); var desc2 = new ActionDescriptor(); desc2.putUnitDouble(app.charIDToTypeID('Top '), app.charIDToTypeID('#Pxl'), top); desc2.putUnitDouble(app.charIDToTypeID('Left'), app.charIDToTypeID('#Pxl'), left); desc2.putUnitDouble(app.charIDToTypeID('Btom'), app.charIDToTypeID('#Pxl'), bottom); desc2.putUnitDouble(app.charIDToTypeID('Rght'), app.charIDToTypeID('#Pxl'), right); desc1.putObject(app.charIDToTypeID('T '), app.charIDToTypeID('Rctn'), desc2); executeAction(app.charIDToTypeID('setd'), desc1, DialogModes.NO); } function makePatternFromSelection(name) { var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putClass(app.charIDToTypeID('Ptrn')); desc1.putReference(app.charIDToTypeID('null'), ref1); var ref2 = new ActionReference(); ref2.putProperty(app.charIDToTypeID('Prpr'), app.stringIDToTypeID("selection")); ref2.putEnumerated(app.charIDToTypeID('Dcmn'), app.charIDToTypeID('Ordn'), app.charIDToTypeID('Trgt')); desc1.putReference(app.charIDToTypeID('Usng'), ref2); desc1.putString(app.charIDToTypeID('Nm '), name); executeAction(app.charIDToTypeID('Mk '), desc1, DialogModes.NO); }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!