问题
I need to combine two series of images (both the same resolution, saved as JPG files) into a single JPG file with the images side by side to each other. I have tried doing this with Photoshop CS6 actions but to no avail... I have searched the internet for possible solutions but as it turns out programming knowledge is required to write a script to perform such a function. I would like to have any help possible with the following:
My file names are as such:
Series one: bone00001.jpg, bone00002.jpg ... bone00060.jpg Series two: st00001.jpg, st00002.jpg ... st00060.jpg
I want them combined side by side so that the "bone" series is on the left, and the "st" series is on the right, and the final series exported as done00001.jpg ... done00060.jpg
Would anyone be able to help me with this Photoshop script?
回答1:
Adam D is right - you're better off asking at the Adobe forums. But as luck would have it your request is very similar to a question asked a while back. The script is crude; but it will do what you want: The images need to be the same size. If the bone images are smaller than the scan images it'll look a mess and won't work.
Save this out as .jsx file. It can be accessed within PS from the file > scripts menu.
Load in one of the bone images, run the script - which will then find the matching scan image and put them side by side and save them out as bone_XXXX_done.jpg (where XXXX is number)
var srcDoc = app.activeDocument;
// call the current document
var srcDoc = app.activeDocument;
// set original width and height
var imageW = srcDoc.width.value;
var imageH = srcDoc.height.value;
// get the info out of the source doc
var fileName = srcDoc.name;
var docName = fileName.substring(0,fileName.length -4);
var filePath = srcDoc.path.toString();
var fileExt = fileName.substring(fileName.length -4, fileName.length);
var nameCheck = fileName.substring(0,fileName.indexOf("bone"));
if (nameCheck <1)
{
var fileNum = fileName.substring(4,fileName.length -4);
// no underscore so we need to open it's namesake
// alert(nameCheck)
var filePair = filePath + "/" + "st" + fileNum + fileExt;
openThisFile(filePair)
activeDocument.selection.selectAll()
activeDocument.selection.copy();
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
app.activeDocument = srcDoc;
activeDocument.resizeCanvas(imageW *2, imageH, AnchorPosition.MIDDLELEFT);
selectRect(0, imageW, imageW*2, imageH)
activeDocument.paste()
activeDocument.flatten();
var newName = filePath + "/" + docName + "_done" + fileExt
saveMe(newName)
}
else
{
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
function openThisFile(masterFileNameAndPath)
{
var fileRef = new File(masterFileNameAndPath)
if (fileRef.exists)
//open that doc
{
app.open(fileRef);
}
else
{
alert("error opening " + masterFileNameAndPath)
}
}
function selectRect(top, left, right, bottom)
{
srcDoc.selection.deselect()
// =======================================================
var id1 = charIDToTypeID( "setd" );
var desc1 = new ActionDescriptor();
var id2 = charIDToTypeID( "null" );
var ref1 = new ActionReference();
var id3 = charIDToTypeID( "Chnl" );
var id4 = charIDToTypeID( "fsel" );
ref1.putProperty( id3, id4 );
desc1.putReference( id2, ref1 );
var id5 = charIDToTypeID( "T " );
var desc2 = new ActionDescriptor();
var id6 = charIDToTypeID( "Top " );
var id7 = charIDToTypeID( "#Pxl" );
desc2.putUnitDouble( id6, id7, top );
var id8 = charIDToTypeID( "Left" );
var id9 = charIDToTypeID( "#Pxl" );
desc2.putUnitDouble( id8, id9, left );
var id10 = charIDToTypeID( "Btom" );
var id11 = charIDToTypeID( "#Pxl" );
desc2.putUnitDouble( id10, id11, bottom );
var id12 = charIDToTypeID( "Rght" );
var id13 = charIDToTypeID( "#Pxl" );
desc2.putUnitDouble( id12, id13, right );
var id16 = charIDToTypeID( "Rctn" );
desc1.putObject( id5, id16, desc2 );
executeAction( id1, desc1, DialogModes.NO );
}
function saveMe(fPath)
{
// save out the image as jpeg
var jpgFile = new File(fPath);
jpgSaveOptions = new JPEGSaveOptions();
jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
jpgSaveOptions.embedColorProfile = true;
jpgSaveOptions.matte = MatteType.NONE;
jpgSaveOptions.quality = 12;
activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);
// close that saved jpg
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
来源:https://stackoverflow.com/questions/14368429/how-to-batch-combine-two-unique-series-of-images-into-a-single-side-by-side-imag