-
-
Save laryn/0a1f6bf0dab5b713395a835f9bfa805c to your computer and use it in GitHub Desktop.
// Replace SmartObject’s Content and Save as JPG | |
// 2017, use it at your own risk | |
// Via @Circle B: https://graphicdesign.stackexchange.com/questions/92796/replacing-a-smart-object-in-bulk-with-photoshops-variable-data-or-scripts/93359 | |
// JPG code from here: https://forums.adobe.com/thread/737789 | |
#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; | |
// JPG Options; | |
jpgSaveOptions = new JPEGSaveOptions(); | |
jpgSaveOptions.embedColorProfile = true; | |
jpgSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE; | |
jpgSaveOptions.matte = MatteType.NONE; | |
jpgSaveOptions.quality = 8; | |
// 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. If you have need of saving different artboards into separate files, | |
// see https://gist.github.com/laryn/0a1f6bf0dab5b713395a835f9bfa805c#gistcomment-3996733 | |
myDocument.saveAs((new File(thePath + "/" + theName + "_" + theNewName + ".jpg")), jpgSaveOptions, true,Extension.LOWERCASE); | |
} | |
} | |
} | |
}; | |
// 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 | |
}; |
To replace a smart object within a PSD with selected image(s) and save the result as a JPG using a Photoshop script, you can refer to the detailed instructions provided in the article on BulkMockup. The article covers the use of scripts to automate the process and includes steps for replacing smart objects in bulk. The script mentioned in the article applies transformations to the smart objects and ensures that the changes are saved as JPG files.
@shohidur333
My new versions actually does this, I've implemented 2 version now. One which edit the link itself, the other will edit the content inside the smartobject. The latter is slower however to the workflow need. But it's still a fraction of doing this all manually .
It's nice you have such expanded tutorials and writing. But it's a commercial product. $15 per month. Kinda steep price if you can get ir for free here
Ive been working on a new version of this script. After someone contacted me about a small issue with the current script. The original script did not resize the image. By adding the code from @magicsun and adding a mask, that work. But the image aspect ratio can cause an issue in that version. If the new images don't fit in terms of the image ratio, you would get blank spots. Ive also now have a version which replaces the content inside the linked SmartObject. This is a different approach and in some cases solves the issue.
I've also found a function on Adobe Community by Stephen A Marsh which allows the user to save as WebP.
I'm stilling testing out if this script can be one version or perhaps we keep both methods. Anyway, im working on adding a dialog window. The user can define settings and placement of the new image. This is for the version which edit the content of the SmartObject. The script also uses ObjectToDescriptor, this means when you reload the script it restores all last settings.
This is how it looks now, it already works with hard-coded save to WebP. Im now in the process of adding all other formats; BMP,JPG,PDF,PSD,TARGA,TIFF,WEBP,PNG-8,PNG-24.