Reemplazar un objeto inteligente de forma masiva con secuencias de comandos o datos variables de Photoshop

¿Hay alguna forma de automatizar el reemplazo de una imagen inteligente con un gráfico diferente?

Por ejemplo, si tengo una imagen maestra de una taza y una gran cantidad de imágenes/diseños rectangulares planos que me gustaría en la taza, después de algún procesamiento. Configuré una imagen inteligente usando uno de los diseños y la modifiqué con algunos filtros para que sea menos rectangular (ajustando la perspectiva, doblando la parte superior e inferior para que coincida con la curva de la taza, etc.).

Ahora necesito averiguar cómo usar Variables (si es posible) para reemplazar la imagen en el objeto inteligente para que se ejecuten las mismas transformaciones/filtros en cada imagen, que luego se colocará en la taza y se guardará.

Veo este tutorial que explica los conceptos básicos de los datos variables y muestra cómo usar imágenes como datos, pero no tengo claro cómo usar esto para actualizar el objeto inteligente para que todas las transformaciones se apliquen a las imágenes.

Si las variables no funcionan con objetos inteligentes, también estoy abierto a usar un script. (Me encantaría un fragmento sobre cómo actualizar un objeto inteligente a través de un script si alguien tiene uno, ya que nunca antes he usado scripts con Photoshop).

En realidad, no puede actualizar los objetos inteligentes con él, es hora de escribir un script
Actualizaré la pregunta para incluir detalles sobre los scripts como una solución aceptable.
Hay una manera más rápida. Pruebe con un guión. Hay algunos disponibles en línea, solo búsquelos. Hará toda la carpeta de imágenes sin usar ninguna de las instrucciones anteriores.

Respuestas (3)

Encontré esta página que tiene una respuesta que se parecía mucho a lo que está buscando, la modifiqué para que funcione con la última versión y, con suerte, se ajuste mejor a sus necesidades.

He aquí cómo usarlo:

  1. Guarde el código a continuación en un archivo con una .jsextensión
  2. Abra su archivo de plantilla y seleccione el SmartObject
  3. Ir aFile->Scripts->Browse
  4. Encuentra tu .jsarchivo y ábrelo
  5. Seleccione sus imágenes/diseños y ábralos
  6. ¡Ya terminaste!

Contenido del archivo .js:

// Replace SmartObject’s Content and Save as PSD
// 2017, use it at your own risk
#target photoshop
if (app.documents.length > 0) {
    var myDocument = app.activeDocument;
    var theName = myDocument.name.match(/(.*)\.[^\.]+$/)[1];
    var thePath = myDocument.path;
    var theLayer = myDocument.activeLayer;
    // PSD Options;
    psdOpts = new PhotoshopSaveOptions();
    psdOpts.embedColorProfile = true;
    psdOpts.alphaChannels = true;
    psdOpts.layers = true;
    psdOpts.spotColors = true;
    // Check if layer is SmartObject;
    if (theLayer.kind != "LayerKind.SMARTOBJECT") {
        alert("selected layer is not a smart object")
    } else {
        // Select Files;
        if ($.os.search(/windows/i) != -1) {
            var theFiles = File.openDialog("please select files", "*.psd;*.tif;*.jpg", true)
        } else {
            var theFiles = File.openDialog("please select files", getFiles, true)
        };
        if (theFiles) {
            for (var m = 0; m < theFiles.length; m++) {
                // Replace SmartObject
                theLayer = replaceContents(theFiles[m], theLayer);
                var theNewName = theFiles[m].name.match(/(.*)\.[^\.]+$/)[1];
                // Save JPG
                myDocument.saveAs((new File(thePath + "/" + theName + "_" + theNewName + ".psd")), psdOpts, true);
            }
        }
    }
};
// Get PSDs, TIFs and JPGs from files
function getFiles(theFile) {
    if (theFile.name.match(/\.(psd|tif|jpg)$/i) != null || theFile.constructor.name == "Folder") {
        return true
    };
};
// Replace SmartObject Contents
function replaceContents(newFile, theSO) {
    app.activeDocument.activeLayer = theSO;
    // =======================================================
    var idplacedLayerReplaceContents = stringIDToTypeID("placedLayerReplaceContents");
    var desc3 = new ActionDescriptor();
    var idnull = charIDToTypeID("null");
    desc3.putPath(idnull, new File(newFile));
    var idPgNm = charIDToTypeID("PgNm");
    desc3.putInteger(idPgNm, 1);
    executeAction(idplacedLayerReplaceContents, desc3, DialogModes.NO);
    return app.activeDocument.activeLayer
};
¡Gracias! Todavía no he tenido la oportunidad de probar esto, pero es lo más parecido a lo que pedí, así que te daré la recompensa.
Avísame si tienes problemas con eso. Lo probé en un archivo que tenía tres capas (el objeto inteligente, una capa de imagen y un fondo) y en dos versiones de Ps, CC 2017 y CS6. Se ejecutó MUCHO más rápido en CC que en CS6, y tenga en cuenta que el PSD debe guardarse antes de poder ejecutar el script.
¡Este script funciona exactamente como esperaba! ¡Muchas gracias! Para cualquiera que lo use en el futuro, solo asegúrese de que los reemplazos de objetos inteligentes tengan exactamente las mismas dimensiones, incluida la resolución. Y lo cambié para guardar como JPG en lugar de PSD -- gist.github.com/laryn/0a1f6bf0dab5b713395a835f9bfa805c
Una mejora (para uso masivo) sería evitar de alguna manera quedarse sin memoria. Actualmente, cada reemplazo se guarda en el historial de Photoshop y en una carpeta enorme se pueden producir errores de memoria después de una gran cantidad de reemplazos. No estoy seguro si conoce una forma de reemplazar, guardar y luego eliminar de la memoria antes de pasar a la siguiente, ¡pero esa sería mi única sugerencia en este momento!
Encontré esto , intentaré implementarlo y probarlo en los próximos días, pero pensé en seguir adelante y publicarlo...
Gracias por el guión. El script funciona perfectamente cuando el objeto inteligente no se transformó para que coincidiera con la forma de la botella. Tengo una botella y quiero automatizar las etiquetas de la botella. La etiqueta es un objeto inteligente que se abre como .psb dentro de mi archivo psd. Cuando ejecuto el script, la imagen de la etiqueta cambia a un pequeño cuadrado y perdí la forma de la etiqueta para que parezca parte de la botella. El objeto inteligente de la etiqueta se dobló usando el modo de deformación. ¿Cómo se puede utilizar el script de esta manera? Gracias de antemano. Isabel
@CircleB hola, ¿podría ayudarme con esta pregunta similar? Gracias. diseñografico.stackexchange.com/questions/128280/…
Además, si desea ahorrar memoria y no quiere mucho desorden en el panel de historial. Puede suspender el historial y mostrar un solo paso. En lugar de ver 50 o cualquier número de estados que creará este script, este método lo reducirá a un solo paso. También puede envolver todo dentro de 1 función para estar seguro// Suspend History // Better for memory, doesnt clutter history when doing a lot automation MainFunctionNAME.main = function() { MainFunctionNAME(); } app.activeDocument.suspendHistory("HISTORY STATE NAME", 'MainFunctionNAME.main()');
Lo siento, no sé cómo agregar el código correctamente. ¡¿Este editor de basura sigue aceptando devoluciones o entradas?!?!
@ElizabethMartin alguien necesitaría actualizar este script y agregar pasos adicionales. Creo que necesitaría bastante revisión ya que los pasos involucrados son bastante diferentes. También puede realizar una acción y luego usar un paso manual para seleccionar y colocar su imagen, luego ejecutar un guardado automático. Eso debería funcionar también. Vea esta captura de imagen, creo que esto funcionará para usted. Si luego ejecuta esta acción en el lote, funciona. Aunque la secuencia de comandos sería mejor porque puede dejar que automatice todas las partes, pero eso es más difícil de completar. i.ibb.co/cY3V4Ck/recorded-edit-mockup-example.png
Puedo modificar este script de @CircleB para que pueda usarse para el diseño de maquetas. Necesitaría algún código extra para funcionar. ¿Alguien tiene un PSD de ejemplo con, digamos, 3 imágenes que deben vincularse? De esa manera tengo un buen archivo de prueba.

abra la taza PSD, mantenga la capa de la taza debajo de la imagen que desea y puede importar todas las imágenes que desee en la taza y registrar acciones para los ajustes de perspectiva. Y reproduzca esas acciones en cada capa que contenga la imagen que desea en la taza. puede convertir todas las imágenes en objetos inteligentes ya sea usando acciones o simplemente haciéndolo manualmente, solo tomará dos clics. también puede asignar una tecla de función para la acción que grabó para que solo presione un botón y la salida se colocará en la carpeta que seleccionó mientras grababa la acción. esto debería convertirlo en un trabajo de presionar un botón si no se completa la automatización. pero eso es lo más cerca que puede estar sin tener que codificar. si aún busca una automatización completa, tendrá que escribir algo de código.

El objeto inteligente ya tiene todos los ajustes. Necesito importar todas las imágenes en el objeto inteligente y luego volver a guardar el archivo de la taza (que tiene el objeto inteligente colocado y ajustado) para cada una de las cientos o miles de imágenes. ¿Tiene algún script de ejemplo que sirva de guía sobre cómo actualizar un objeto inteligente?
no, no cambies las imágenes dentro del objeto inteligente, solo crea un objeto inteligente para cada imagen que quieras poner en la taza y aplica los mismos efectos en cada capa de objeto inteligente usando acciones. y realice otra acción que simplemente guarde el documento en una carpeta y, después de guardar, elimine la capa superior de objetos inteligentes. y hace lo mismo una y otra vez hasta que todas las imágenes estén en la taza. pd: no necesitas un script para esto. trata de aprender más sobre las acciones, entenderás lo que estoy diciendo.

Si alguien puede perfilar un documento de prueba. Obtuve un trabajo de versión que abre el objeto inteligente y colocará una nueva capa, lo cerrará y luego guardará un nuevo archivo. Veo a muchas personas solicitando esta solicitud de plantillas de maquetas.

Modifiqué el código y codifiqué algo que funcionara. Sin embargo, necesito un archivo de prueba adecuado para ver si el script funciona bien y como se esperaba.

Espero que esto no obtenga ningún voto negativo menor, un poco cruel cómo responder aquí