简体   繁体   中英

Photoshop Script: combine 3 images side-by-side

I'm needing to take a folder of about 500 1024x768 resolution images, and combine them three at a time into a solid panorama at 3072x768. (Not Photoshop's photomerge)

I am by no means a programmer; just stumbled upon this site and everyone seems very helpful. I'm leaning that using a java script inside Photoshop is probably my best bet.

I'll rename the source files to:

Image_SD_1a

Image_SD_1b

Image_SD_1c

Image_SD_2a

...and so on...

One each three-image is built, it needs to save into another folder as a JPG, as:

Image_001

Image_002

...and so on... But I can do a batch rename after of course.

I searched and found these two scripts that are close, but I'm not smart enough to add a "third" image step, or change the file name structure.

How to batch combine two unique series of images into a single side-by-side image in Photoshop?

Merging files together (side by side) in folder Photoshop scripts

Any help is very much appreciated!

This script will do what you want. It works on these principles:

  • All your images (Image_SD_1a.jpg, Image_SD_1b.jpg, Image_SD_1b.jpg) are in the same directory.
  • The images are jpegs (will be saved out as Image_SD_1abc.jpg)
  • The images will be saved out in the same folder as the other images.
  • Open image A AND THEN run the script.

It's not perfect, and it could be improved and made better, but tired and I'm running out of coffee. Script is as follows:

//pref pixels
app.preferences.rulerUnits = Units.PIXELS;


// call the source document
var srcDoc = app.activeDocument;
var ext = getFileExtension(srcDoc);
var docPath = srcDoc.path;

// get original width and height
var imageW = srcDoc.width.value;
var imageH = srcDoc.height.value;

// name the mother
var docName = srcDoc.name;

// get names for images B & C
var imageStub = getImageName(docName);
var imageB = docPath + "/" + imageStub + "b" + ext;
var imageC = docPath + "/" + imageStub + "c" + ext;

// load image B % copy it
openThisFile(imageB);
activeDocument.selection.selectAll();
activeDocument.selection.copy();
activeDocument.selection.deselect();
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);


// return to image A
app.activeDocument = srcDoc;

// paste it
activeDocument.paste();
translateLayer(imageW, 0);

// do the same for C
// load image C % copy it
openThisFile(imageC);
activeDocument.selection.selectAll();
activeDocument.selection.copy();
activeDocument.selection.deselect();
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);

// return to image A
app.activeDocument = srcDoc;

// paste it
activeDocument.paste();
translateLayer(imageW *2, 0);


// resize canvas
srcDoc.resizeCanvas(imageW *3, imageH, AnchorPosition.MIDDLELEFT);

// flatten it
srcDoc.flatten();

// save it out
var tempName = imageStub + "abc";
saveMe(docPath, tempName, 12);

// close the new doc
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);

function getImageName (astring)
{
  // Image_SD_1a.jpg
  astring += "";
  //re move extension -1
  var temp = astring.substring(0, astring.lastIndexOf("."));
  return temp.substring(0, temp.length-1);
}

function getFileExtension (astring)
{
  astring += "";
  var x = astring.substring(astring.lastIndexOf("."), astring.length-1);
  //alert(x);
  return x;
}

// function OPENTHISFILE (masterFileNameAndPath)
// --------------------------------------------------------
function openThisFile(masterFileNameAndPath)
{
  var fileRef = new File(masterFileNameAndPath)
  if (fileRef.exists)
  //open that doc
    {
      app.open(fileRef);
    }
  else
    {
      alert("error opening " + masterFileNameAndPath)
    }
}

function saveMe(fPath, fname, myJpgQuality)
{
  //vegetables 
  if (!myJpgQuality) myJpgQuality = 12;

  // Set filePath and fileName to source path
  filePath = fPath + "/" + fname + ".jpg";

  var jpgFile = new File(filePath);
  jpgSaveOptions = new JPEGSaveOptions();
  jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
  jpgSaveOptions.embedColorProfile = true;
  jpgSaveOptions.matte = MatteType.NONE;
  jpgSaveOptions.quality = myJpgQuality;

  activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);
}

function translateLayer(dx,dy)
{
  // =======================================================
  var id2014 = charIDToTypeID( "Trnf" );
  var desc416 = new ActionDescriptor();
  var id2015 = charIDToTypeID( "null" );
  var ref287 = new ActionReference();
  var id2016 = charIDToTypeID( "Lyr " );
  var id2017 = charIDToTypeID( "Ordn" );
  var id2018 = charIDToTypeID( "Trgt" );
  ref287.putEnumerated( id2016, id2017, id2018 );
  desc416.putReference( id2015, ref287 );
  var id2019 = charIDToTypeID( "FTcs" );
  var id2020 = charIDToTypeID( "QCSt" );
  var id2021 = charIDToTypeID( "Qcsa" );
  desc416.putEnumerated( id2019, id2020, id2021 );
  var id2022 = charIDToTypeID( "Ofst" );
  var desc417 = new ActionDescriptor();
  var id2023 = charIDToTypeID( "Hrzn" );
  var id2024 = charIDToTypeID( "#Pxl" );
  desc417.putUnitDouble( id2023, id2024, dx );
  var id2025 = charIDToTypeID( "Vrtc" );
  var id2026 = charIDToTypeID( "#Pxl" );
  desc417.putUnitDouble( id2025, id2026, dy );
  var id2027 = charIDToTypeID( "Ofst" );
  desc416.putObject( id2022, id2027, desc417 );
  executeAction( id2014, desc416, DialogModes.NO );
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM