# Bilder automatisch generieren mit fortlaufenden Zahlen



## Sebigf (1. August 2006)

Hallo zusammen !

Ich muss für einem Kollegen 100 Bilder machen für ein Wertungssystem. Nun bin ich aber absolut zu faul da 100 Bilder immer zu ändern um abzuspeichern 

Gibt es einen Weg, diese automatisch zu generieren + abspeichern ?

Danke


----------



## susi22 (1. August 2006)

Ja das geht. Datei->Automatisieren->Stapelverarbeitung


----------



## Sebigf (3. August 2006)

Ok, aber wie wende ich das genau an ?
Ist auch eine neue Vergabe von Dateinamen möglich ?

Danke


----------



## Markus Kolletzky (3. August 2006)

Hallo,

Fortlaufende Nummerierungen geht nicht über irgendwelche Aktionen, dafür benötigst Du die PS-interne Script-Engine 
(vgl. hierzu die beiden Tutorials Scripten in Photoshop, Teil 1 sowie Scripten mit Photoshop, Teil 2 - das Script.)

Und da der Autor des o.g. Tutorials (hotschen) auch in anderen Communities sein Wissen preis gibt
und Leuten bei den gleichen Problemen hilft, zitiere ich einfach mal den Code aus dem Thread vom DSLR-Forum:


```
anzahl=600		'***Anzahl de Nummern eingeben***
Speicherpfad="C:\temp"	'***Speicherpfad angeben***

Set appref = CreateObject("Photoshop.Application")
If appref.documents.count<>0 Then
	Set docref=appref.ActiveDocument
Else	
	MsgBox "Erst die Datei öffnen!"
End If

For i=1 To anzahl
    docref.ArtLayers(1).TextItem.Contents = CStr(i)
    docref.SaveAs Speicherpfad & "\" & i & ".jpg"
Next
```

Gruß


----------



## susi22 (3. August 2006)

Markus Kolletzky hat gesagt.:
			
		

> Hallo,
> 
> Fortlaufende Nummerierungen geht nicht über irgendwelche Aktionen, ...



Natürlich geht das! Eben mit der Stapelverarbeitung. Hab selber grad 10 Gallerien so gemacht.

Erst alle Bilder öffnen-
dann eine neue Aktion erstellen-
Aufnahmeknopf betätigen-
Bild ändern wie gewünscht- Aktion "stoppen"
Dann halt ins Menü Stapelverarbeitung gehen.
Set/Aktion wählen,
"geöffnete Dateien",
dann den Zielordner wählen.
Darunter kann man jetzt wählen WIE er es speichern soll. zb.: Zweistellige Seriennummer (01.jpg)
Mit dieser Nummer beginnt er und fährt fort bis zum letzten Bild (02, 03, 04... .jpg)
Und genauso lässt es sich auch weiter führen. zb: wenn man 03 eingibt, macht er weiter mit 04, 05, 06...


----------



## Philip Kurz (3. August 2006)

Hallo Susi.

Ich denke hier liegt ein Missverständnis vor. Sebigf möchte, meiner Meinung nach, nicht die Dateien nummerieren, sondern einzelne Grafiken mit den jeweiligen Zahlen erstellen. Das will er aber nun nicht 100 mal per Hand machen - verständlich. 

Grüße

Philip


----------



## susi22 (3. August 2006)

Ups, ja gut ok, denn hab ich nix gesagt. Das liest sich irgendwie ganz anders raus.:suspekt:


----------



## Sebigf (3. August 2006)

Danke euch allen für die Antworten 

@ Markus Kolletzky

Dein Code funktioniert soweit super, nur macht er mit .psd Dateien und keine .jpg. Hast du eine Ahnung, woran das liegen kann ?

Danke


----------



## Markus Kolletzky (3. August 2006)

Hallo,

Sollte normalerweise nicht sein, denn der Code besagt ja:

```
docref.SaveAs Speicherpfad & "\" & i & ".jpg"
```
Vielleicht sieht den Thread ja hotschen und er kann Dir weiterhelfen. 

Gruß


----------



## hotschen (4. August 2006)

@Markus: Wie hast du das denn gefunden? 

Aber stimmt schon. Es wird nur als PSD gespeichert...mein Fehler.

Hiermit speichert er als JPG: (Die Qualität kann man oben eingeben)

```
anzahl=600		'***Anzahl de Nummern eingeben***
Speicherpfad="C:\temp"	'***Speicherpfad angeben***
qualitaet=10			'Speicherqualitaet für jpg angeben (1..12)

Set appref = CreateObject("Photoshop.Application")
Set SaveOptions= CreateObject("Photoshop.JPEGSaveOptions") 
SaveOptions.Quality =qualitaet

If appref.documents.count<>0 Then
	Set docref=appref.ActiveDocument
Else	
	MsgBox "Erst die Datei öffnen!"
End If

For i=1 To anzahl
    docref.ArtLayers(1).TextItem.Contents = CStr(i)
    docref.SaveAs Speicherpfad & "\" & i & ".jpg",SaveOptions, True
Next
```


----------



## Sebigf (4. August 2006)

Super ! Es geht 1A 

Danke !

PS: Wo finde ich mehr Infos darüber ? Kann man auch Strukturierungen einstellen ? Also, dass der Zahl z.B. immer eine "0" vorrangestellt wird...


----------



## Sebigf (4. August 2006)

Noch etwas...

Ich habe noch etwas ähnliches wie die Zahlensache zu erledigen...
Kann man sowas auch mithilfe von einem Array (wie bei PHP) einsetzen, womit ich Werte aus einer Liste auch automatisiert erstelle ? Ich muss ca. 150 Buttons machen, mit verschiedenen Texten.

Geht sowas ?

Danke


----------



## hotschen (4. August 2006)

Sebigf hat gesagt.:
			
		

> Super ! Es geht 1A
> 
> Danke !
> 
> PS: Wo finde ich mehr Infos darüber ? Kann man auch Strukturierungen einstellen ? Also, dass der Zahl z.B. immer eine "0" vorrangestellt wird...


Du meinst bei einstelligen Zahlen? Den 'Format'-Befehl gibts unter VBS leider nicht, nur unter VB. Aber man kann sich mit einer kleinen Abfrage helfen. Ersetze die Schleife im Script durch diese:

```
For i=1 To anzahl
	If i<10 Then i=0&i
    docref.ArtLayers(1).TextItem.Contents = CStr(i)
    docref.SaveAs Speicherpfad & "\" & i & ".jpg",SaveOptions, True
Next
```

Zum anderen Problem:
Du willst bestimmte Sachen aus einer Textdatei auslesen? Auch kein Problem. Habe mal sowas für Tischkarten gemacht. Ein Beispiel kannst du hier runterladen.


----------



## Sebigf (4. August 2006)

Geniales Script ! danke

Wie kann ich es machen, dass es einfach nur in die Grafik gelegt wird und als 72DPI GIF abgespeichert wird ?

## Nachtrag

Es handelt sich dabei um Foren-Buttons... leider


----------



## hotschen (4. August 2006)

Sebigf hat gesagt.:
			
		

> Geniales Script ! danke
> 
> Wie kann ich es machen, dass es einfach nur in die Grafik gelegt wird ...


?
Was ist 'es'?


----------



## Sebigf (4. August 2006)

Ich möchte es so einfach haben, wie mit den Zahlen 

Einfach nur die Textdatei Zeile für Zeile einlesen und generieren, aber als 72DPI GIF Grafik...

Du hast ja sogar noch CMYK und das mit dieser Zusammenfassung drin.
Mit php komme ich damit klar, aber nicht VBS.... leider


----------



## hotschen (4. August 2006)

Also immer denselben Button, nur der Text ändert sich?
Versuchs mal mit folgendem Script. Kann es aber z.Z. nicht testen:

```
Dim appref, docref, dateipfad, speicherpfad, zaehler, fso, datei, Saveoptions, Namen(), protokoll

dateipfad="namen.txt" 		'Dateipfad zur Textdatei mit den Namen
Speicherpfad="c:\temp"		'Speicherpfad für erstellte Dateien

Set appref = CreateObject("Photoshop.Application")

If appref.Documents.Count=0 Then 
	MsgBox "Erst eine Datei öffnen! Danach Script erneut ausführen."
	WScript.Quit
End If
Set docref = appRef.ActiveDocument
Set Saveoptions = Createobject("Photoshop.GIFSaveOptions")

Set protokoll=docref.ActiveHistoryState 
docref.MergeVisibleLayers 
docref.SaveAs speicherpfad & "\test", Saveoptions, True
docref.ActiveHistoryState =protokoll

NamenEinlesen
For i=1 To UBound(Namen)
	docref.ArtLayers(1).TextItem.Contents = Namen(i)
	Set protokoll=docref.ActiveHistoryState 
	docref.MergeVisibleLayers 
	docref.SaveAs speicherpfad & Namen(i), Saveoptions, True
	docref.ActiveHistoryState =protokoll	
Next

Sub NamenEinlesen()
	zaehler=0
	Set fso = CreateObject("Scripting.FileSystemObject")
	Set datei = fso.opentextfile(dateipfad,1)
	
	Do While Not datei.AtEndOfStream
		Redim Preserve Namen(zaehler)
		Namen(zaehler)=datei.readline
		zaehler=zaehler+1
	Loop
	zaehler=zaehler-1
	datei.close 
End Sub
```

PS: Die Textebene muß in diesem Fall die oberste Ebene sein.


----------



## Sebigf (4. August 2006)

Es scheint etwas zu machen, allerdings werden keine Dateien erzeugt... zumindest nicht im Zielordner. Angaben sind richtig gemacht worden von mir...

Hast du eine Idee?


----------



## hotschen (5. August 2006)

Ich vermute mal, du hast in deinem Stammverzeichnis jetzt einige Dateien mehr  ...sorry.

Ersetze diese Zeile

```
docref.SaveAs speicherpfad & Namen(i), Saveoptions, True
```
durch diese:

```
docref.SaveAs speicherpfad & "\" & Namen(i), Saveoptions, True
```


----------



## tobi1908 (9. Mai 2008)

docref.ArtLayers(1).TextItem.Font = "Arial"
docref.ArtLayers(1).TextItem.Size= 12

geht mir ein 

Wie stelle ich dann noch die Farbe ein


Danke


----------



## tobi1908 (9. Mai 2008)

Oh cool  Habe es

Schreibe es hier mal schnell rein, falls es noch jemand brauchen kann!



Set textColor = CreateObject ("Photoshop.SolidColor")
textColor.RGB.Red = 255
textColor.RGB.Green = 255
textColor.RGB.Blue = 255

Hier stellt man die Farbe an und init. das Objekt mit dem Namen textColor

Und dann kann man es aufrufen durch

docref.ArtLayers(1).TextItem.Color= textColor


----------

