ImageMagick [SOLVED]

    • Offizieller Beitrag

    hehe .. ich werd nicht faul, mich mit spezialprogrs rumzuplagen ;)


    aaaalso:
    ich hab nen haufen 16bit-Tif's, die aber nur einen 14bit inhalt haben. D.h. also, ich nutze nur 1/4 des Farbraumes, den die Datei hergibt.
    Aus bestimmten gründen soll ich jetzt diese 14bit auf 16bit aufblasen.
    Hab mich dazu schon mit ImageMagick auseinandergesetzt, und folgendes geschafft:


    Code
    convert -level 75%,100% verzeichnis1\14bit_datei.tif verzeichnis2\16bit_datei.tif


    jetzt will ich aber ne ganze liste files konvertieren, und hab naiverweise gedacht es müßt so gehen:


    Code
    convert -level 75%,100% verzeichnis1\*.tif verzeichnis2\16bit_img_%03d.tif


    wobei alle neuen bilder 16bit_img_000.tif, 16bit_img_001.tif, 16bit_img_002.tif, etc. heißen sollen.


    leider funktioniert das aber nicht! im taskmanager seh ich, wie mein hauptspeicher auf einen schlag zum bersten voll wird (in 3 sekunden auf 2.5gb memorylast!!) aber bilder tauchen keine im "verzeichnis2" auf ...


    irgendwer ne idee, wo der hund begraben liegt?

  • Da reicht im Grunde ein kleines foreach mit glob:

    PHP
    foreach ( glob( "/pfad/zu/deinen/bildern/*.tif" ) as $datei ) {
    	exec('convert...
    }


    Dann hast du in der Var $datei den kompletten Pfad zur aktuellen Datei, die er gerade durchläuft, die du dann mit convert bearbeiten kannst.

  • Wos hob ma gsogt, a Gscheits System mit ner Bash kann des.


    Owa die Powershell von XP-Live sollte des a können.


    SCNR ;)


    Blöde Frage aber dennoch, es gibt Scripts für Gimp, die genau das auch
    können, Tante Google sollte dir helfen, auch unter M$-Gefilde.

    Ceterum censeo Russiam esse delendam! (Marcus Porcius Cato, 234-149 v. Chr.)

  • Du lässt das PHP doch aber unter Windows laufen, und PHP kann auch auf Windows-Servern foreach. :)


    Und statt des Aufrufs "exec('convert...')" ist es bei Windows einfach "exec('convert.exe ...')". Ganz einfach. :) Ich nutze das z.B. bei einem TYPO3-Projekt per RFC auf einem (Windows-)Inhouse-Server eines Kunden.

    • Offizieller Beitrag

    ah .. nö .. das mit php/mysql is a anderer server :)


    der hier hat kein php, sondern da laß ich imagemagick direkt in der eingabeaufforderung laufen. am liebsten den befehl in ner .CMD-datei verpackt, die ich nur doppelclicken muß.


    auf jeden fall test ich das foreach noch - wenn das unter windows in der shell auch gehen soll wärs cool!


    nen webserver mit php drauf zu installen, nur wegen der 16bit/14bit umwandlung is zu aufwendig, und die datenmengen sind zu groß, um sie immer auf den linux-webserver zu kopieren, umzukonvertieren, und dann zurückzuschieben (es geht da um datensätze die aus 3000 tif's bestehen und 40gb haben .. und zwar MEHRERE solcher datensätze! die schieb i net unnötig übers netz hin und her ....)

    • Offizieller Beitrag

    oh, eh ichs vergesse:


    danke an cyberblitzbirne, die lösung war sehr ähnlich ("help for" in der shell hilft auch ;) )


    Code
    md 16bit_Radios 
    for %%f in (*.tif) do (
       convert -level 75%%,100%% %%f 16bit_Radios\%%f 
    )


    1. erstellt ein Verzeichnis namens "16bit_Radios"
    2. wandelt jede Datei im derzeitigen Verzeichnis um, und legt die umgewandelte ins Unterverzeichnis "16bit_Radios"


    genau, was ich brauch :)

    • Offizieller Beitrag

    Nach langer Zeit hab ich jetzt ein weiteres Problem mit einem ähnlichen Fall.


    Ich hab einen haufen 8bit-BMP-files, und will diese in 16bit-TIF-files umwandeln. Also hab ich mir mein script wieder hergenommen und ein wenig umgebaut:


    Code
    for %%f in (*.bmp) do (
      convert -level 0.000000001%%,100%% -depth 16 %%f %%f.tif
    )


    funktioniert wunderbar, solange die BMP-files keine Leerzeichen enthalten!


    hab ein wenig gegoogelt, und bin aber nicht fündig geworden. etwas in der art hier funktioniert nicht:

    Code
    for /F "delims=" %%f in ("*.bmp") do (
      convert -level 0.000000001%%,100%% -depth 16 %%f %%f.tif
    )


    jemand ne idee?