Photoshop Script: Hinweistext in Bild setzen

Diesen Script wird über Adobe Photoshop (CS2) aufgerufen und fügt automatisch einen Hinweistext (z.B. Copyright-Hinweis) unten rechts in Bildern ein.

Vorgehensweise:

  • JavaScript als *.js irgendwo auf dem Rechner speichern
  • Einstellungen im Skript anpassen (einfacher Editor oder ExtendScript Toolkit)
  • Photoshop starten
  • Datei > Skripten > Durchsuchen dann Laden und fertig!
//###################################################################################
//
//  Skript um einen Hinweistext ins Bild zu setzen und als Web-JPEG zu speichern
//
//###################################################################################

// Einstellungen
var picSourcePath = "C:\\Quellordner\\";
var picTargetPath = "C:\\Zielordner\\";
var picText       = "Copyright © 2006 by Name";
var picTextSize   = 10; // Wert in Pixel

//###################################################################################

// Hauptskript...

// Photoshop-Einstellungen sichern
var startRulerUnits = app.preferences.rulerUnits;
var startTypeUnits = app.preferences.typeUnits;
var startDisplayDialogs = app.displayDialogs;

// Dialoge verbergen und Pixel als Einheit einstellen
app.preferences.rulerUnits = Units.PIXELS;
app.preferences.typeUnits = TypeUnits.PIXELS;
app.displayDialogs = DialogModes.NO;

// Liste aller Dateien und Ordner erstellen
var picFolder = Folder(picSourcePath);
var fileList = picFolder.getFiles();

// Pruefung ob auch Dateien und Ordner vorhanden sind
if (picSourcePath != null && picTargetPath != null) {

	// Quellbilder in Schleife oeffnen
	for (var i=0; i<fileList.length; i++) {

		// Nur Dateien (und keine Ordner) oeffnen
		if (fileList[i] instanceof File) {
			open(fileList[i]);

			// schwarzer Text als neue Ebene setzen; ist fuer die Umrandung
			setMyText(picText, picTextSize, "Verdana", "000000", 3, 0,
			activeDocument.width-4, activeDocument.height-4);

			// weisser Text als neue Ebene setzen
			setMyText(picText, picTextSize, "Verdana", "FFFFFF", 3, 0,
			activeDocument.width-4, activeDocument.height-4);

			// Alle Ebenen rastern (um Effekte auf Text anwenden zu koennen)
			activeDocument.rasterizeAllLayers();

			// Auf untere Textebene den Filter Dunkle Bereiche vergroessern, Wert=1px
			activeDocument.artLayers[1].applyMinimum(1);

			// Transparent der unteren Textebene auf 30%, der oberen auf 60%
			activeDocument.artLayers[1].opacity = 30;
			activeDocument.artLayers[0].opacity = 60;

			// Bild als JPG speichern (Fuer Web speichern...)
			var newFileName = fileList[i].name;
			saveWebJpg(newFileName.substring(0, newFileName.length-4) + ".jpg",	picTargetPath, 60);

			// Schliessen ohne Nachfrage
			app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);

		}
	}
}

// Photoshop-Einstellungen zuruecksetzen
app.preferences.rulerUnits = startRulerUnits;
app.preferences.typeUnits = startTypeUnits;
app.displayDialogs = startDisplayDialogs;

alert("Skript fertig :)");

//###################################################################################

// Hilfsfunktionen...

// Funktion um Dokument als Jpeg zu speichern (Fuer Web speichern...)
// Parameter: Dateiname, Pfad mit abschliessendem '\'!, Qualitaet 1-100
// Beispielaufruf: saveWebJpg("test.jpg", "c:\\bilder\\", 75);
function saveWebJpg(jpgName, filePath, jpgQuality ) {
	var saveFile = new File(filePath + jpgName);
	var webJpgOptions = new ExportOptionsSaveForWeb();
	webJpgOptions.format = SaveDocumentType.JPEG;
	webJpgOptions.optimized = true;
	webJpgOptions.quality = jpgQuality;
	activeDocument.exportDocument(saveFile, ExportType.SAVEFORWEB, webJpgOptions);
	File = null; ExportOptionsSaveForWeb = null;
}

// Funktion um Text ins Dokument zu setzen. Neue Textebene wird erstellt.
// Parameter: Text, Groesse, Schriftart, Farbe (Hex), Ausrichtung, Glaettung, PosX, PosY
// Ausrichtung: 1=links, 2=zentriert, 3=rechts; Glaettung: 0=aus; 1=scharf
// Beispielaufruf: setMyText("Mein Text", 10, "Arial", "FF0000", 1, 0, 50, 50);
function setMyText(theTxt, txtSize, txtFont, txtColor, txtAlign, txtAntiAlias, txtPosX, txtPosY) {
	var thisDoc = activeDocument;
	var textColor = new SolidColor;
	textColor.rgb.hexValue = txtColor;
	var myTextLayer = thisDoc.artLayers.add();
	myTextLayer.kind = LayerKind.TEXT;
	myTextLayer.textItem.contents = theTxt;
	myTextLayer.textItem.font = txtFont;
	myTextLayer.textItem.size = txtSize;
	myTextLayer.textItem.color = textColor;
	switch (txtAlign) {
		case 1:  myTextLayer.textItem.justification = Justification.LEFT;   break;
		case 2:  myTextLayer.textItem.justification = Justification.CENTER; break;
		case 3:  myTextLayer.textItem.justification = Justification.RIGHT;  break; }
	switch (txtAntiAlias) {
		case 0:  myTextLayer.textItem.antiAliasMethod = AntiAlias.NONE;  break;
		case 1:  myTextLayer.textItem.antiAliasMethod = AntiAlias.SHARP; break; }
	myTextLayer.textItem.position = Array(txtPosX,txtPosY);
}