Christian S.: Batch für ImageMagick

Hi,

ich würde gerne eine Batch-Datei für ImageMagick schreiben, die meine Bilder entsprechend formatiert.

Folgende Struktur:

root
 /Bilder1
   /thumbs
   bla.jpg
   blubb.jpg
 /Bilder2
 /Bilder3

In jedem Bilder Ordner liegen JPG-Bilder. Jedes dieser Bilder soll durch ImageMagick bearbeitet werden. Für jedes Bild soll der convert Befehl ausgeführt werden. Gleichzeitig soll das Bilder umgenannt werden.
Und es soll für jeden Unterordner ein Ordner "thumbs" erstellt werden, und darin thumbnails erstellt werden.

Soweit bin ich schon:

===

IF not exist thumbs mkdir thumbs

FOR %%b in (*.jpg) do convert "%%b" +polaroid -thumbnail 10000@ -bordercolor snow -background black  "thumbs%%~nb.png"

===

führe ich diese .bat aus, wird ein Ordner thumbs erstellt, und darin ein _gleichnamiges_ thumbnail erstellt (nur als PNG).

Also ich müsste rekursiv durch alle Ordner unterhalb von root, die nicht "thumbs" heißen, durch und

a) einen Unterordner "thumbs" erstellen, falls noch keiner existiert.
b) für jedes JPG 2x den convert Befehl aufrufen, und den neuen Dateinamen  darin angeben. Der neue Dateiname soll z.B. 001.png, 002.png usw bis 999.png... heißen.

Also der convert Befehl muss 2x mal aufgerufen werden, 1x wegen "thumbs" und einmal für die normalen Bilder, die dann ins Web sollen. Die Originalbilder sind zu groß, und vll. will ich noch so was wie Schatten hinzufügen.

Kennt sich einer aus damit?

Gruß!

  1. Hellihello

    http://aktuell.de.selfhtml.org/artikel/grafik/thumbnails/index.htm kennst du?

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. http://aktuell.de.selfhtml.org/artikel/grafik/thumbnails/index.htm kennst du?

      hi,
      ja klar... was meinst du wo ich meinen bisherigen code herhabe...

      aber viel weiterführendes steht da ja nicht.

      Gruß!

      1. Hellihello

        was ich nicht verstand: du willst Windows.bat aber hast eine Verzeichnisstruktur mit /root ...?

        Vielleicht wäre eine Kombination mit php (shell_exec?) ja was?

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. Hi,

          was ich nicht verstand: du willst Windows.bat aber hast eine Verzeichnisstruktur mit /root ...?

          das war nur beispielhaft... Ich arbeite schon unter Windows.

          Bin nun schon einiges weiter...

          Stehe nun nur noch vor einem kleinen Problem:

          ich arbeite in einer for schleife alle *.jpg ab.

          Die können halt irgendwie heißen, und ich hätte die gerne anschließend in einem schönen Format, und zwar hochzählend:

          image001.png
          image002.png
          ...
          image010.png
          ...
          image100.png

          wie krieg ich das hin? Vor allem auch die führenden Nullen?

          im Moment sieht es so aus:

          for %%b in (%1\*.jpg) do convert "%%b" -thumbnail 10000@ ( +clone  -bordercolor snow -background black -shadow 60x4+4+4 ) +swap -background none -mosaic +polaroid "%1\thumbs%%~nb.png"

          %1 ist das aktuelle Verzeichnis. Im Moment nutze ich noch %%~nb was mir den Namen der Datei ohne Endung gibt.

          Gruß!

          1. Hellihello,

            Die können halt irgendwie heißen, und ich hätte die gerne anschließend in einem schönen Format, und zwar hochzählend:

            image001.png
            image002.png
            ...
            image010.png
            ...
            image100.png

            wie krieg ich das hin? Vor allem auch die führenden Nullen?

            im Moment sieht es so aus:

            for %%b in (%1\*.jpg) do convert "%%b" -thumbnail 10000@ ( +clone  -bordercolor snow -background black -shadow 60x4+4+4 ) +swap -background none -mosaic +polaroid "%1\thumbs%%~nb.png"

            %1 ist das aktuelle Verzeichnis. Im Moment nutze ich noch %%~nb was mir den Namen der Datei ohne Endung gibt.

            Ich würde/könnte das nur mit PHP machen, was ja unter windows nicht wirklich ein Problem wäre. Vinzenz May aber kann das auch mit den Commandliners von Win.

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
          2. gudn tach!

            ich arbeite in einer for schleife alle *.jpg ab.

            Die können halt irgendwie heißen, und ich hätte die gerne anschließend in einem schönen Format, und zwar hochzählend:

            image001.png
            image002.png
            ...
            image100.png

            wie krieg ich das hin? Vor allem auch die führenden Nullen?

            im Moment sieht es so aus:

            for %%b in (%1\*.jpg) do convert "%%b" -thumbnail 10000@ ( +clone  -bordercolor snow -background black -shadow 60x4+4+4 ) +swap -background none -mosaic +polaroid "%1\thumbs%%~nb.png"

            fuer fuehrende nullen kannst du den lss-operator verwenden, siehe "help if"; bsp.
              if 1 lss 2 echo boah!

            beachte, dass du ausserdem u.u. mit der verzoegerten erweiterung von variablen arbeiten musst, siehe "help set".

            oder du fuegst die nullen halt nachtraeglich mit zwei for-schleifen hinzu.

            oooooder: du nutzt einfach perl (oder vbs, php, qbasic, ...) ;-)

            prost
            seth

  2. Hi nochmal

    danke für eure Hilfe.

    mein Batch file sieht nun so aus:

    @for /f "delims=" %%i in ('dir /ad/s/b') do @call :create %%i %%~ni

    :create
    @if "%2"=="thumbs" goto :eof

    @if not exist %1\thumbs mkdir %1\thumbs
    @set /a _counter= 1
    @for %%b in (%1\*.jpg) do @call :convert %1 %%b
    @goto :eof

    :convert

    @if %_counter% LSS 100 set _name=0%_counter%
    @if %_counter% LSS 10 set _name=00%_counter%

    convert "%2" -thumbnail 12000@ -bordercolor snow -background black +polaroid "%1\thumbs%_name%.png"
    @set /a _counter+= 1
    @set _name=
    @goto :eof

    Es erstellt für alle Unterordner (rekursiv) einen thumbs Ordner, falls keiner existiert, und der aktuelle Ordner nicht schon "thumbs" heißt und ruft für jedes .jpg den convert Befehl aus, und kopiert es als 001.png - 999.png in den thumbs Ordner.

    Das kniffligste war, herauszufinden, dass Leerzeichen auch zu Variablennamen gehören, set _name = ist was anderes als set _name=

    :-/

    Gruß!

    1. ok... noch nicht ganz gelöst:

      dieses hier:

      @for %%b in (%1\*.jpg) do @call :convert %1 %%b

      gibt mir die *.jpgs in mir nicht nachvollziehbarer Reihenholge aus.

      Ich hätte aber gerne, dass die Dateien sortiert werden nach Namen.

      Also das Verzeichnis enthält die Dateien

      a.jpg
      b.jpg
      c.jpg
      d.jpg

      Was im Moment passiert: b.jpg wird zu 001.jpg, d.jpg wird 002.jpg usw...

      Ob da ein System hintersteckt weiß ich nicht.

      Natürlich soll aber a.jpg auch zu 001.jpg usw...

      Wie gehts?

      Gruß!

      1. Hallo Christian,

        dieses hier:

        @for %%b in (%1\*.jpg) do @call :convert %1 %%b

        gibt mir die *.jpgs in mir nicht nachvollziehbarer Reihenholge aus.

        wieso gehst Du davon aus, dass die Dateien sortiert ausgegeben würden?

        Ich hätte aber gerne, dass die Dateien sortiert werden nach Namen.

        Nutze die Ausgabe von

        DIR

        mit den Optionen, die die Dir genehme Sortierung zur Folge haben.

        Freundliche Grüße

        Vinzenz