4

I am trying to create a sequence just like this:

sequence of images

Link

The issue is, my sequence is much longer: 439 frames. I have the PNG files, I just need to merge them to be side-by-side like it is in the link. I've tried fiddling around with using actions and droplets, but I can't get it to behave like I want. How can I do it?

2
  • 2
    Is Photoshop a hard requirement or are you open to other solutions?
    – JohnB
    Feb 20, 2014 at 14:06
  • 2
    Expanding on JohnB's comment - InDesign has a built in script for this.
    – John
    Feb 20, 2014 at 16:31

3 Answers 3

5

I would recommend Imagemagick as the appropriate tool here. It has a high learning curve, but is much faster than Photoshop for this sort of batch processing. The following commands should work:

convert inputFolder/* +append output.png

where inputFolder is a folder containing only the images you're interested in. They should be named in sequence (001, 002, 003...)

If you want to add padding between the images (in this case 5 pixels to the left and right edges), try this:

montage inputFolder/* -tile x1 -geometry +5+0 tile.png

If you can't use Imagemagick, a Google search for "Photoshop Filmstrip Script" yields many results, such as this one.

2
  • 1
    works like a charm thank you. is there any way to add a little padding after each image?
    – parliament
    Jan 4, 2015 at 23:16
  • 2
    Sure. See the updated answer. Jan 5, 2015 at 23:32
0

I hope my script can tell you what to do: gist

Loading stack of images (one layer above another):

function loadStack(name,size){
var d;
for (var i = 0; i < size; i++) {
    var fileNum = sprintf("%05d",i);
    var f = new File(sourcePath+'fr'+name+'_'+fileNum+'.png');
// you can use your own file selection
    if(i==0){
// operating on first file in sequence
        app.open(f);
        d = app.activeDocument;
        d.activeLayer.name = fileNum;
    }else{
// adding file content to new layer
        d.artLayers.add();
        d.activeLayer.name = fileNum;
        app.open(f);
        app.activeDocument.selection.selectAll();
        app.activeDocument.selection.copy();
        app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
        d.paste();
    }
}
}

Next I simply do rows with my stack:

function doRows(rows,cols){
var d = app.activeDocument;
var w = d.width;
var h = d.height;
d.resizeCanvas(w*cols,h*rows,AnchorPosition.TOPLEFT);
for (var j = 0; j < cols; j++) {
    for (var i = 0; i < rows; i++) {
// using numbered layers
        var fileNum = sprintf("%05d", j*rows+i );
        d.artLayers.getByName(fileNum).translate(w*j, h*i);
    }
}
}
-1

manually doing this is going to be your best bet. Turn on guides, turn on rulers, drop a guide at the edge of each new frame you add... and get some coffee. The fluctuations in image size and the nature of taxing memory on something this massive at the speed of an action mean that humanly doing this is likely to work better.

There maybe many "work-arounds" to your end goal that are faster. Can you describe that end goal?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.