What's new
Photoshop Gurus Forum

Welcome to Photoshop Gurus forum. Register a free account today to become a member! It's completely free. Once signed in, you'll enjoy an ad-free experience and be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

AUTOMATE, BATCH, ACTION - images import !!!


PSmaster

New Member
Messages
1
Likes
0

Hello,

I need to process sequence of images using Batch.
In one step of Action inserted such command : File → Place Embedded (import of a mask – PND images with alpha chennel)
I need to achieve that for each subsequent image, a mask with the next index number is imported.


That is, for image1 – mask1, for image2 – mask2, for image3 - mask3 etc.


images are located in folderA
masks are located in folderB


so far, for each subsequent file, the Action imports the same mask
(the file that was specified)

That is, for image1 – mask1, for image2 – mask1, for image3 – mask1 etc


Please tell me the solution!
Thank you in advance!
 
I am pretty sure this requires a script and not just an Action and Batch command. There are forum members quite good in PS scripting so hang on and hopefully one will see your request and jump in.
John Wheeler
 
I'm a little late to the party... I originally wrote the following script for a user at the Adobe User Forums, it will pair alphabetically sorted files from an image folder with images from a mask folder, converting the background image to a layer and applying the mask image as a layer mask to the image, then save out a PSD. If it is not 100% of what you are looking for, it should be "easy enough" to modify.

JavaScript:
/*

Combine Image & Mask Images to PSD.jsx

by Stephen Marsh - 2020

//community.adobe.com/t5/photoshop/automated-layer-mask-from-separate-silhouette-file/td-p/10865377

Code based on the following topic thread:
//community.adobe.com/t5/photoshop/batch-process-groups-of-files-based-on-numbering/td-p/10809093

NOTE:
There is no error checking, the 2 input folders must all contain the same quantity of alphabetically sorting images.
No Files should be open.
It is assumed that all files are RGB.
It is assumed that all files are flattened with only a "Background" image layer.
It is assumed that all files will be saved with a single masked layer, named after the document name.
It is also assumed that the old and mask files all have the same width/height/resolution.
Original file names will have a prefix of "Masked_" added.

*/

#target photoshop

/* Start Open Document Error Check - Part A: If */
if (app.documents.length == 0) {

    (function () {

        // Prompt for input and output folders
        var imageFiles = Folder.selectDialog('Select the images folder...', '~/desktop/');
        // Test if CANCEL returns null, then do nothing.
        if (imageFiles == null) {
            return
        };
        var maskFiles = Folder.selectDialog('Select the mask folder...', '~/desktop/');
        // Test if CANCEL returns null, then do nothing.
        if (maskFiles == null) {
            return
        };
        var outFolder = Folder.selectDialog('Select the save/output folder...', '~/desktop/');
        // Test if CANCEL returns null, then do nothing.
        if (outFolder == null) {
            return
        };

        // File List
        var searchMask = '*.???';
        var fileList1 = imageFiles.getFiles(searchMask);
        var fileList2 = maskFiles.getFiles(searchMask);
        
        // Alpha-numeric sort
        fileList1.sort();
        fileList2.sort();

        // File input Loop
        for (var i = 0; i < fileList1.length; i++) {
            var doc1 = open(fileList1[i]);
            var doc2 = open(fileList2[i]);

            // Start - Doing stuff to open files

            // Mask Doc [1]
            app.activeDocument.selection.selectAll();
            app.activeDocument.selection.copy();
            app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
            // Image Doc [0]
            app.activeDocument.paste();

            // Load active mask layer RGB composite channel as selection
            set();

            function set() {
                var c2t = function (s) {
                    return app.charIDToTypeID(s);
                };
                var s2t = function (s) {
                    return app.stringIDToTypeID(s);
                };
                var descriptor = new ActionDescriptor();
                var reference = new ActionReference();
                var reference2 = new ActionReference();
                reference.putProperty(s2t("channel"), s2t("selection"));
                descriptor.putReference(c2t("null"), reference);
                reference2.putEnumerated(s2t("channel"), s2t("channel"), s2t("RGB"));
                descriptor.putReference(s2t("to"), reference2);
                executeAction(s2t("set"), descriptor, DialogModes.NO);
            }

            // Remove the mask doc layer
            app.activeDocument.activeLayer.remove();

            // Convert the Background 'image' layer to regular layer
            app.activeDocument.activeLayer.isBackgroundLayer = false;

            // Create layer mask
            make();

            function make() {
                var c2t = function (s) {
                    return app.charIDToTypeID(s);
                };
                var s2t = function (s) {
                    return app.stringIDToTypeID(s);
                };
                var descriptor = new ActionDescriptor();
                var reference = new ActionReference();
                descriptor.putClass(s2t("new"), s2t("channel"));
                reference.putEnumerated(s2t("channel"), s2t("channel"), s2t("mask"));
                descriptor.putReference(s2t("at"), reference);
                // Invert mask as required using "revealSelection" or "hideSelection"
                descriptor.putEnumerated(s2t("using"), c2t("UsrM"), s2t("hideSelection"));
                executeAction(s2t("make"), descriptor, DialogModes.NO);
            }

            // Name the masked image layer after the document
            var fileName = app.activeDocument.name.replace(/\.[^\.]+$/, '');
            app.activeDocument.activeLayer.name = fileName;

            // Finish - Doing stuff to open files

            // Save PSD
            var docName = app.activeDocument.name.split('.')[0];
            var saveFilePSD = new File(new File(outFolder + '/' + 'Masked_' + docName.split('.')[0] + '.psd'));
            SavePSD(saveFilePSD);

            // Setup PSD options
            function SavePSD(saveFilePSD) {
                psdSaveOptions = new PhotoshopSaveOptions();
                psdSaveOptions.embedColorProfile = true;
                psdSaveOptions.alphaChannels = true;
                psdSaveOptions.layers = true;
                psdSaveOptions.annotations = true;
                psdSaveOptions.spotColors = true;
                app.activeDocument.saveAs(saveFilePSD, psdSaveOptions, true, Extension.LOWERCASE);
            }

            app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);

        }

        alert('Script completed!');

    })();

}
/* Finish Open Document Error Check - Part A: If */

/* Start Open Document Error Check - Part B: Else */
else {
    alert('Please close all open files before running this script!');
}
/* Finish Open Document Error Check - Part B: Else */
 


Write your reply...

Back
Top