Photoshop-Stapel-/Massenspeicherung für das Web

Dies ist eine Variation einer Reihe früherer Fragen, aber ich scheine eine einzigartige Situation zu haben.

  • Ich habe eine Photoshop-Datei.
  • Es verfügt über viele Ebenengruppen, die jeweils ein eigenständiges und vollständiges zu exportierendes Bild bilden
  • Diese Bilder wurden bereits einmal exportiert
  • Die resultierenden Bildnamen sind die gleichen wie die Ebenengruppennamen

So, ich habe jetzt einen Ordner mit korrekten Bildern. Zum Beispiel:

Eine Gruppenschicht könnte hypothetisch sein:

  • 2015-12-02-auf-einem-Boot

Dies wurde für das Web exportiert als:

  • 2015-12-02-auf-einem-Boot.png

Es gibt Hunderte von Ebenengruppen, und dies scheint die geeignetste Methode zu sein, um mit diesen ähnlichen, aber einzigartigen Bildern umzugehen.

Als Teil der Umstellung auf responsives Design muss dieser Prozess jetzt Bilder mit angepasster Größe erstellen. Zum Beispiel die Layergruppe:

  • 2015-12-02-auf-einem-Boot

.. muss jetzt in 4 separaten Größen exportiert werden

  • 2015-12-02-auf-einem-Boot.png
  • 2015-12-02-auf-einem-Boot-500.png
  • 2015-12-02-auf-einem-Boot-1000.png
  • 2015-12-02-auf-einem-Boot-1300.png

Meine Frage:

Ist es möglich, diesen Prozess zu automatisieren? Verwenden eines schrittweisen Quasi-Programmierprozesses:

foreach (layer groups) {
 1. Enable visibility on a layer group
 2. Export for web, using the layer group name
 3. Export for web again, but also resize to 500px wide, appending "-500"
 4. Export for web again, but also resize to 1000px wide, appending "-1000"
 5. Export for web again, but also resize to 1300px wide, appending "-1300"
 6. Remove visibility on layer group
}

Selbst wenn ich es nicht könnte foreach, würden mir die Punkte 1-6 eine Menge Zeit sparen.

Nachdem ich mit Photoshop-Aktionen herumgespielt habe, weiß ich nicht, wie ich auf Elemente wie den Ebenennamen zugreifen kann, was der Sinn der gesamten Übung ist.

Ich bin eigentlich ein Entwickler, also habe ich keine Angst davor, mir in einigen Makros oder Code die Hände schmutzig zu machen, aber ich sehe nicht, wie ich das machen soll. Ich sehe nicht einmal, wie ich an den Code selbst komme ... wenn das überhaupt zugänglich ist!

Nö. Ich hatte einen soliden Blick. Obwohl es "andere Möglichkeiten" gibt, möchte ich speziell die obige Frage wissen, keine Variation davon ... daher die Frage. Insbesondere - die Frage der "Schichtengruppe" wurde nie erwähnt.

Antworten (1)

Wie kann ich ein Spritesheet einfach zusammenbauen? hat ein Skriptbeispiel, das sich (teilweise) mit dem Iterieren durch Ebenen und dem Umschalten der Sichtbarkeit befasst.

Und wie kann man den Export mehrerer PNGs mit unterschiedlichen Größen aus Photoshop automatisieren? hat einen Link in der Antwort von "Justin Putney", der das folgende Snippet enthält, das ein Array von Größen verarbeitet, einen Dateinamen definiert und "für das Web speichert":

Hier ist der direkte Link zu GitHub: https://gist.github.com/appsbynight/3681050 )

// Save icons in PNG using Save for Web.
var sfw = new ExportOptionsSaveForWeb();
sfw.format = SaveDocumentType.PNG;
sfw.PNG8 = false; // use PNG-24
sfw.transparency = true;
doc.info = null; // delete metadata
var icons = [
{"name": "iTunesArtwork@2x", "size":1024},
{"name": "iTunesArtwork", "size":512},
{"name": "Icon", "size":57},
{"name": "Icon@2x", "size":114},
{"name": "Icon-72", "size":72},
{"name": "Icon-72@2x", "size":144},
{"name": "Icon-Small", "size":29},
{"name": "Icon-Small@2x", "size":58},
{"name": "Icon-Small-50", "size":50},
{"name": "Icon-Small-50@2x", "size":100}
];
var icon;
for (i = 0; i < icons.length; i++)
{
icon = icons[i];
doc.resizeImage(icon.size, icon.size, // width, height
null, ResampleMethod.BICUBICSHARPER);
var destFileName = icon.name + ".png";
if ((icon.name == "iTunesArtwork@2x") || (icon.name == "iTunesArtwork"))
{
// iTunesArtwork files don't have an extension
destFileName = icon.name;
}
doc.exportDocument(new File(destFolder + "/" + destFileName), ExportType.SAVEFORWEB, sfw);
doc.activeHistoryState = startState; // undo resize
}

Wenn all dies zu viel ist, werde ich bemerken, dass eine aufgezeichnete Aktion "Für Web speichern" das Ordnerziel speichert, aber beim Stapeln den aktuellen Dateinamen für den Export verwendet.

Wenn Sie einen Satz temporärer Ablagen einrichten, die den fest codierten Ordnern „Für Web speichern“ entsprechen, die in einer Aktion aufgezeichnet wurden: „Größe ändern, Für Web speichern, Größe ändern Für Web speichern, Größe ändern, Für Web speichern, [. ..], zurücksetzen, schließen" und die Aktion für einen ganzen Ordner mit Bildern ausführen, erhalten Sie am Ende eine Sammlung von Ordnern, einen für jede Größe.

Sie können dann OS-Stapeldateien oder andere Programmierungen/Skripts verwenden, um die Dateinamen zu manipulieren und sie in ihren endgültigen Zielordner zu verschieben.

Adobe hat eine Scripting-Dokumentation. Sie können Javascript, VBscript oder Applescript verwenden. Sie können GD auch nach "jsx photoshop" durchsuchen, um viele andere Fragen und Antworten zum Skripting zu erhalten.
Dies sind ein paar großartige Vorschläge/Ressourcen. Es ist keine vollständige Antwort, aber ich stimme dafür, in die richtige Richtung zu drängen.