Ich habe oft Photoshop-Dateien mit der folgenden allgemeinen Ebenenkonfiguration (jedes Element ist eine Ebenengruppe):
Dieses Beispiel würde drei verschiedene Bilder erzeugen. Jeder enthält die Background Group
Kombination mit einer der Output n
Gruppen.
Mein aktueller Workflow erfordert, dass ich jedes dieser Ausgabebilder in verschiedenen Größen (basierend auf der Bildbreite) exportiere (Für Web speichern ...). Sie sind:
Alle werden als .jpg
Dateien mit einer Qualitätseinstellung von 60
.
Diese Abmessungen können in anderen Situationen variieren, aber für die aktuelle Datei sind dies die Ausgabegrößen.
Das Bild, mit dem ich gerade arbeite, ist quadratisch, aber es gibt Situationen, in denen es rechteckig sein kann.
Derzeit muss ich jedes Mal, wenn ich Änderungen an der Background Group
Datei vornehme, manuell 5 x 3-Bilder exportieren. Das sind 15 Operationen. Es kostet mich viel Zeit, also denke ich, dass es einen Weg geben muss, es zu automatisieren.
Ich würde gerne wissen, wie ich das am besten automatisieren kann.
Ich habe andere verwandte Lösungen gefunden, sowohl hier als auch in anderen Blogbeiträgen und Adobe-Foren. Sie konzentrieren sich jedoch entweder auf den Export jeder Ebene (eine Ebene = ein Bild) oder auf den Export einer gesamten PSD-Datei in mehrere Ausgabegrößen.
Dieses Skript auf Github exportiert jede einzelne Ebene in ein Bild, aber keine Ebenengruppen, und es lässt keinen Stapel unterschiedlicher Ausgabegrößen zu).
Ich habe auch die xtools scripts gefunden , die sehr nützlich aussehen, aber keine Exporte basierend auf Ebenengruppen zulassen. Ansonsten sieht es aus wie ein sehr handliches Werkzeug.
Background Group
.layer-name-[width].jpg
)Idealerweise würde mir die Lösung erlauben, sie für verschiedene Ausgabegrößen anzupassen. Damit es nicht darauf beschränkt ist, nur die oben genannten Größen zu exportieren.
Zumindest wäre es großartig, einfach einen Stapel von Dateigrößen exportieren zu können, um das Format (JPG oder PNG) in einer festgelegten Qualität festzulegen, indem alle sichtbaren Ebenen zusammengeführt werden. Das würde diese Beispielaufgabe zumindest auf drei Aktionen reduzieren (eine pro Output n
Ebene).
Photoshop Image Processor Pro ermöglicht es zumindest teilweise, #5 zu erreichen. Ich kann die erforderlichen Bildabmessungen exportieren (jeweils eine Ebenengruppe). Ich sehe jedoch keine Möglichkeit, die Bildabmessungen (Breite und / oder Höhe) in die Dateibenennung oder den Ebenennamen aufzunehmen. Das bedeutet, dass es einen zusätzlichen Schritt zum manuellen Umbenennen jeder Datei entsprechend ihrer Größe und dem entsprechendenOutput n
Ebenennamen gibt. Es erfordert immer noch, dass ich jede Ebenengruppenkombination einzeln durchführe.
Kann jemand vorschlagen, wie das geht?
Danke schön.
Was Sie brauchen, ist ein Skript, das die Arbeit für Sie erledigt. Im Skript benötigen Sie: ein Array, das die aktuellen Breiten enthält, auf die Sie verkleinern. Schleifen Sie über dieses Array. Duplizieren Sie das Quellbild. Verkleinern Sie das Quellbild auf die angegebene Größe. Benennen Sie es um (imagename_newwidth.jpg) und schließen Sie es
Ich bin verwirrt durch Ihre genauen spezifischen Anforderungen am Ende Ihrer Frage. Das folgende Skript gibt Ihnen jedoch einen Ausgangspunkt (Ihr aktueller Arbeitsablauf):
//pref pixels
app.preferences.rulerUnits = Units.PIXELS;
// call the source document
var srcDoc = app.activeDocument;
// set the jpeg quality
var myJpgQuality = 6;
// name the file name after the source file but remove the extension
var fName = app.activeDocument.name;
var docName = fName.substring(0, fName.lastIndexOf("."));
// define the array to hold the sizes of the shrunk images
var sizeArray = [
1200,
800,
600,
400,
150
]
/// main loop for shrinking images
for (var i = 0; i < sizeArray.length; i++)
{
var shrinkWidth = sizeArray [i];
var mySaveName = docName + "_" + shrinkWidth;
// duplicate the source image
duplicateIt(mySaveName);
// resize it according to width
scaleWithStyle(shrinkWidth, true, "Wdth");
// Set filePath and fileName to source path
var filePath = srcDoc.path + "/" + mySaveName + ".jpg";
// Save it!
saveAsJpeg(filePath);
// Close it!
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
} // loop over icon array (i)
function duplicateIt(str)
{
// duplicate image into new document
if (arguments.length == 0) str = "temp";
var id428 = charIDToTypeID( "Dplc" );
var desc92 = new ActionDescriptor();
var id429 = charIDToTypeID( "null" );
var ref27 = new ActionReference();
var id430 = charIDToTypeID( "Dcmn" );
var id431 = charIDToTypeID( "Ordn" );
var id432 = charIDToTypeID( "Frst" );
ref27.putEnumerated( id430, id431, id432 );
desc92.putReference( id429, ref27 );
var id433 = charIDToTypeID( "Nm " );
desc92.putString( id433, str ); // name
executeAction( id428, desc92, DialogModes.NO );
}
function scaleWithStyle(input, style, widthOrHeight)
{
var id01 = charIDToTypeID( "ImgS" );
var desc = new ActionDescriptor();
var id02 = charIDToTypeID( widthOrHeight ); // "Wdth" or "Hght"
var id03 = charIDToTypeID( "#Pxl" );
desc.putUnitDouble( id02, id03, input );
var id04 = stringIDToTypeID( "scaleStyles" ); //scale styles
desc.putBoolean( id04, style ); //scale styles
var id05 = charIDToTypeID( "CnsP" ); // constrain proportions
desc.putBoolean( id05, true ); // constrain proportions
var id06 = charIDToTypeID( "Intr" );
var id07 = charIDToTypeID( "Intp" );
var id08 = charIDToTypeID( "Bcbc" );
desc.putEnumerated( id06, id07, id08 );
executeAction( id01, desc, DialogModes.NO );
}
function saveAsJpeg(filePath, myJpgQuality)
{
if(! myJpgQuality) myJpgQuality = 12;
// Flatten the jpg
activeDocument.flatten();
// jpg file options
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 mergeDown()
{
app.activeDocument.activeLayer.merge();
}
inspiriertz
output 1
, 2 und 3 (jeweils mit der Hintergrundgruppe. Ist das richtig?inspiriertz
inspiriertz
Ghul Narr
app.activeDocument.activeLayer = app.activeDocumentc.artLayers.getByName(myLayerName);
wo myLayername die Variable ist, die den Namen der Ebene enthält, nach der Sie suchen. Verwenden Sie andernfalls Anführungszeichen "Ebene 1".