1. Diese Seite verwendet Cookies. Wenn Sie sich weiterhin auf dieser Seite aufhalten, akzeptieren Sie unseren Einsatz von Cookies. Weitere Informationen

Bilder ausrichten 1.03

Bilder einer Belichtungsreihe aus der Hand werden gegeneinander ausgerichtet

  1. HeiM

    HeiM Mitglied

    Dabei seit:
    08.04.03
    Beiträge:
    5.359
    Zustimmungen:
    3
    AW: Bilder ausrichten

    So erging es mir auch, als ich das Script das erste mal nutzte.
    Es war alles eingefroren, obwohl der Task Manager sagte, FF wird ausgeführt.
    Jetzt, bei weiteren Ausrichtungen lief das Script ganz normal ab und ließ sich auch schließen.
    Also alles im grünen Bereich.

    Ich benötige einen U-Ordner ebenfalls nicht.
    Die Bilder liegen mit Suffix oder Präfix im gleichen Ordner, aus dem sie kamen, werden auch von dort aus weiterbearbeitet und das Ergebnis gespeichert. Damit kann man das Zwischenergebnis löschen.
    Ich nutze nicht mal den Tempordner.
     
  2. gope

    gope Mitglied

    Dabei seit:
    28.10.03
    Beiträge:
    884
    Zustimmungen:
    0
    AW: Bilder ausrichten

    Harald, super. Danke für dieses tolle Script. Ich hatte mein Handbuch verlegt und musste erst im Netz nach einem suchen. Belichtungsreihen mache ich sonst selten. Aber jetzt läufts rund. Auch gleich probiert mit einer Maskierung -> speichern der MASKE -> anwenden auf das dunkelste Bild -> Clonbasis das hellste und einfach drüberfahren. Schon ist das erledigt.
    Peter
     
  3. Niels1938

    Niels1938 Mitglied

    Dabei seit:
    15.05.03
    Beiträge:
    1.664
    Zustimmungen:
    1
    Ich wollte nachschauen, gibt's vielleicht ein neueres Version, es sieht nicht so aus,
    aber die blauen direkt-links zB oben 'Version 1.02' scheint nicht mehr zu funktionieren.

    Grüsse
     
  4. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.419
    Zustimmungen:
    12
    Hallo Niels,
    mit der Überarbeitung des Forums haben sich alle Internetadressen geändert.
    Das Skript Bilder ausrichten findest Du jetzt hier.
    Die Version 1.02 ist immer noch aktuell.
     
  5. Niels1938

    Niels1938 Mitglied

    Dabei seit:
    15.05.03
    Beiträge:
    1.664
    Zustimmungen:
    1
    Ich finde das Skript 'Bilder ausrichten' sehr angenehm und gut.
    Aber wenn es zu einer update kommt, dann könnte ich mir wünschen das es gab eine Option
    alle ausgerichtete Bilder zuschneiden zu die gemeinsame Bildfläche.

    Grüsse
     
  6. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.419
    Zustimmungen:
    12
    Hallo Niels,
    ich habe mich mal mit Deinem Ansinnen alle ausgerichteten Bilder auf die gemeinsame Bildfläche zu zuschneiden beschäftigt. Leider ist mir keine Lösung dazu eingefallen. Wenn man per Skript auf die Funktion "Bilder mischen" zugreifen könnte, wäre folgendes denkbar:
    • die ausgerichteten Bilder mischen
    • das Ergebnis im Beschneidungsdialog anbieten
    • dem manuell erstellten Beschnitt die Schnittwerte entnehmen und diese dann auf alle ausgerichteten Bilder anwenden
    Leider ist das aber nicht machbar weil wie gesagt kein Zugriff auf "Bilder mischen" möglich ist.
     
  7. Niels1938

    Niels1938 Mitglied

    Dabei seit:
    15.05.03
    Beiträge:
    1.664
    Zustimmungen:
    1
    Hallo Harald.
    Danke für den Versuch.

    Grüsse
     
  8. Niels1938

    Niels1938 Mitglied

    Dabei seit:
    15.05.03
    Beiträge:
    1.664
    Zustimmungen:
    1
    Hallo Harald.

    Ich benutze gern dieses Skript als Vorstufe für Zusammensätzungen von Bilder.
    Ich habe doch bei zwei Bilder etwas merkwürdiges gefunden.
    Die Ausricht läuft durch als gelungen, aber das Ergebnis ist falsch für die eine.

    Die Bilder liegt in folgendes Link, das Ergebnis in Unterordner 'Ausrichten'
    https://1drv.ms/f/s!AuNDpAUewP5S7VrPF-rloCp48tTp

    Grüsse
     
  9. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.419
    Zustimmungen:
    12
    Hallo Niels,
    im Skript wird zum Ausrichten ein von Joachim angebotener Befehl benutzt und zwar:

    Funktion
    FF_MatchImages(VT_BSTR infiles, VT_BSTR outfiles);

    Beschreibung
    Richtet die angegebenen Bilder korrekt übereinander aus und speichert ausgerichetete Einzelbilder

    Argumente
    infiles = Pfade der auszurichtenden Bilder (CRLF getrennt)
    outfiles = Speicherpfade der ausgerichteten Bilder (CRLF getrennt)​

    Zu falschen Ergebnissen kann nur Joachim eine Aussage machen.
     
  10. thomasfeuster

    thomasfeuster Mitglied

    Dabei seit:
    25.01.09
    Beiträge:
    45
    Zustimmungen:
    0
    Hallo,

    eine direktes, gemeinsames Beschneiden nach dem ausrichten könnte ich auch gebrauchen!. Ich habe mal ein wenig in den Funktionen geblättert und zumindest FF_MixImage gefunden. Könnte man daraus einen Dialog bauen, der genau das ermöglicht? Meine Fixfoto-Scripting Kenntnisse sind leider beschränkt, sonst könnte ich das selbst mal versuchen...

    Gruß,
    Thomas
     
  11. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.419
    Zustimmungen:
    12
    Hallo Thomas,
    der Befehl FF_MixImage hilft nicht weiter.
    Das Problem ist die Größe der schwarzen Ränder zu erkennen. Da dies nicht möglich ist, könnte man nur rundherum einen Rand abschneiden, der aber zu klein oder zu groß (könnte man evtl. in Kauf nehmen).
    Wäre das eine akzeptable Lösung?
     
  12. thomasfeuster

    thomasfeuster Mitglied

    Dabei seit:
    25.01.09
    Beiträge:
    45
    Zustimmungen:
    0
    Hallo Harald,

    das würde bei mir nur funktionieren, wenn man die Rahmengröße einfach variieren kann.

    Mein Anwendungsfall: Ich mache immer wieder mal Reihenaufnahmen (statt Filmen) aus der Hand. Daraus mache ich dann animated gifs. Dazu müssen die Fotos vorher ausgerichtet und einheitlich beschnitten werden.

    Da die Aufnahmen aus der Hand sind, gibts immer wieder mal größere Verschiebungen zwischen den Bilder. Aktuell mache ich es folgendermaßen:

    1. Ausrichten mit deinem Script
    2. Bilder mischen
    3. Alle markieren und passende Maske definieren & speichern
    4. Maske einzeln auf jedes Bild anwenden und Maskeninhalt kopieren und via Irfanview als jpg speichern (FF kann nur png oder tif???)

    Vermutlich wäre ich auch schon glücklich, wenn man Schritte 3+4 irgendwie sinnvoll automatisieren kann bzw. in einem Script machen kann. Den Schritt #2 würde ich dann noch per Hand machen :)

    Der "richtige" Weg wäre es ja sowieso, FF_MatchImages so zu erweitern, dass man die Verschiebungswerte mit zurück bekommt. Daraus lässt sich der max. Rahmen leicht ermitteln...
     
  13. Mecki14

    Mecki14 Mitglied

    Dabei seit:
    15.03.06
    Beiträge:
    2.419
    Zustimmungen:
    12
    Zum Beschnitt könnte man die Rahmenbreite vorgebbar in Pixeln machen.
    Aber inzwischen hab ich noch eine andere Idee. Die ausgerichteten Bilder sind logischerweise größer als die Originale. Man könnte die maximale Differenz in Breite und Höhe ermitteln und mit diesen Werten den Beschnitt vornehmen.
    Damit wäre hoffentlich auch Niels geholfen.

    Direkt kann ich mich aber nicht darum kümmern, da ich morgen in Urlaub fahre. Je nach Wetterlage finde ich dort aber vielleicht mal Zeit, entsprechende Versuche zu machen.
    Also bitte etwas Geduld, aber ich werde mich auf jeden Fall näher mit dem Thema befassen - versprochen ;).
     
  14. thomasfeuster

    thomasfeuster Mitglied

    Dabei seit:
    25.01.09
    Beiträge:
    45
    Zustimmungen:
    0
    Hm, bei mir sind die nicht größer? Bei den _matched gibts lediglich einen schwarze Rahmen, der durch die Verschiebung des Originals kommt. In Richtung der Verschiebung wird das Bild aber einfach an den ursprünglichen Dimensionen abgeschnitten.

    Aber daraus könnte man auch was machen :) In dem man nämlich für alle _matched die Rahmendicke bestimmt, sollte man das max. innere Rechteck bestimmen können. Klar gibts Fälle, an denen der Bildrand selbst 100% schwarz ist... Aber ich hatte sowas schon mal gebaut für ein Script, das für außerhalb von FF gedreht Bilder das max. Rechteck zum croppen bestimmt. Hat in den meisten Fällen funktioniert, die ich hatte. Und hier ist die initiale Idee dazu: Ich brauche Hilfe - Ausschneiden "maximiert" für gedrehte jpgs - von Harald :)

    Dir erst mal schönen Urlaub! Ich bin dann vermutlich weg, wenn du wieder im Lande bist. Aber danach werde ich mal gut erholt mein Glück versuchen.
     
  15. thomasfeuster

    thomasfeuster Mitglied

    Dabei seit:
    25.01.09
    Beiträge:
    45
    Zustimmungen:
    0
    So, ging doch schneller als gedacht! Mit dem angehängten Script scheint es für die Fälle die ich parat habe zu funktionieren. Sollte also möglich sein, das Ausrichten-Script entsprechend zu erweitern.

    Code:
    //FFSubmenu=Tools
    //FFName=Autocrop matched jpgs
    
    DEBUG = false;
       
    var CrLf = "\r\n";
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    
    DoWork();
    
    function DoWork()
    {
        // Namenszusatz für die zu speichernde Datei
        var namenszusatz = ".fforig";
       
        var tmp,hist,exi;
       
        var imagenum = FF_GetImageCount();
        if (imagenum == 0) {
            FF_MessageBox("Keine Bilder ausgewählt",0);
            return;
        }
       
        //** Start Dialog AutocropMatchedJPEGs **
        FF_AddDialog("AutocropMatchedJPEGs",226,157);
        FF_AddControl("AutocropMatchedJPEGs","ARJProgress","PROGRESS",2,143,223,12);
        FF_AddControl("AutocropMatchedJPEGs","ARJImage","IMAGE",16,12,89,122);
        FF_AddControl("AutocropMatchedJPEGs","ARJOutputName","STATIC",113,12,110,15);
        FF_AddControl("AutocropMatchedJPEGs","ARJOutputMessage","EDIT",113,34,109,101);
        //** End Dialog AutocropMatchedJPEGs **
       
        FF_SetControlStyle("AutocropMatchedJPEGs","ARJOutputMessage",2048);
    
        FF_OpenDialog("AutocropMatchedJPEGs");
        FF_SetControl("AutocropMatchedJPEGs","ARJOutputMessage","");
       
        // Alle Bilder müssen die gleiche Größe haben
        var    xsize, ysize, bc = 0;
        // Bestimmung der Vereinigung der schwarzen Ränder => an alle 4 Seiten den größen schwarzen Rand finden
        var topbarwidth = 0, bottombarwidth = 0, leftbarwidth = 0, rightbarwidth = 0;
        for(var i = 0; i<imagenum ;i++) {
            var path = FF_GetImageName(i);
            var splitPath = SplitPath(path);
             
            // Überspringen, was nicht nach Raw aussieht
            if(splitPath.ext.toLowerCase() != ".jpg" &&
              splitPath.ext.toLowerCase() != ".bmp" &&
              splitPath.ext.toLowerCase() != ".png")  {
                continue;
            }
           
            if (i == 0) {
                xsize = FF_GetImageWidth();
                ysize = FF_GetImageHeight();
            } else {
                if ((xsize != FF_GetImageWidth()) || (ysize != FF_GetImageHeight())) {
                    FF_MessageBox("Bilder haben verschiedene Größe!",0);
                    return;
                }
            }
           
            if (!FF_LoadImage(path)) continue;
            // Bestimmung der Randdicke: vom Rand ins Zentrum laufen, bis pixel != schwarz
            // Aber nicht in den ecken loslaufen! Da kann alles schwarz sein... Daher in der Mitte starten
            var leftbar = 0, rightbar = 0, topbar = 0, bottombar = 0;
            // left
            while ((FF_GetPixel(leftbar, ysize/2) == bc) && leftbar<xsize)
            {
                leftbar++;
            }
            // right
            while ((FF_GetPixel(xsize-rightbar, ysize/2) == bc) && rightbar<xsize)
            {
                rightbar++;
            }
            // top
            while ((FF_GetPixel(xsize/2, topbar) == bc) && topbar<ysize)
            {
                topbar++;
            }
            // bottom
            while ((FF_GetPixel(xsize/2, ysize-bottombar) == bc) && bottombar<ysize)
            {
                bottombar++;
            }
    
            if (DEBUG) FF_MessageBox("Links: "+leftbar+", Rechts: "+rightbar+", Oben: "+topbar+", Unten: "+bottombar, 0);
           
            if ((leftbar == xsize-1) || (rightbar == xsize-1) || (topbar == ysize-1) || (bottombar == ysize-1)) {
                // irgendwas stimmt nicht... ränder sind so groß wie das bild?
                FF_MessageBox("Ränder könnten nicht bestimmt werden!" + CrLf + "Links: "+leftbar+", Rechts: "+rightbar+", Oben: "+topbar+", Unten: "+bottombar,0);
                return;
            }
           
            if (leftbar > leftbarwidth) {
                leftbarwidth = leftbar;
            }
            if (rightbar > rightbarwidth) {
                rightbarwidth = rightbar;
            }
            if (topbar > topbarwidth) {
                topbarwidth = topbar;
            }
            if (bottombar > bottombarwidth) {
                bottombarwidth = bottombar;
            }
        }
       
        if (DEBUG) FF_MessageBox("Ränder:" + CrLf + "Links: "+leftbarwidth+", Rechts: "+rightbarwidth+", Oben: "+topbarwidth+", Unten: "+bottombarwidth,0);
        FF_SetControl("AutocropMatchedJPEGs","ARJOutputMessage",
            "Breite: "+xsize+", Höhe: "+ysize +CrLf+CrLf+
            "Ränder über alle Bilder:" + CrLf +
            "Links: "+leftbarwidth+", Rechts: "+rightbarwidth +CrLf+
            "Oben: "+topbarwidth+", Unten: "+bottombarwidth);
       
        // Schleife über alle markierten Bilder   
        for(var i = 0; i<imagenum ;i++) {
            var path = FF_GetImageName(i);
            var splitPath = SplitPath(path);
             
            // Überspringen, was nicht nach Raw aussieht
            if(splitPath.ext.toLowerCase() != ".jpg" &&
              splitPath.ext.toLowerCase() != ".bmp" &&
              splitPath.ext.toLowerCase() != ".png")  {
                continue;
            }
             
            // Bildname im Fortschrittsbalken anzeigen
            FF_SetProgressText(i, imagenum, splitPath.file);
            if (DEBUG) FF_MessageBox(splitPath.file, 0);
           
            if (!FF_LoadImage(path)) continue;
            FF_SetControl("AutocropMatchedJPEGs","ARJImage",0);
            FF_SetControl("AutocropMatchedJPEGs","ARJOutputName",splitPath.file);
            FF_SetControl("AutocropMatchedJPEGs","ARJProgress",i+1/imagenum*100);
    
            //***************************************************
            // Bearbeitungen im 8-Bit-Modus
            //***************************************************
       
            // crop image
            FF_Crop(leftbarwidth, topbarwidth, xsize-leftbarwidth-rightbarwidth, ysize-topbarwidth-bottombarwidth);
           
            if (DEBUG) FF_MessageBox("Das Bild ist gecropped",0);
            // continue;
           
            //***** Ende der 8-Bit-Bearbeitung*************************
            // sicherungskopie 1:1 speichern
            var outName = splitPath.dir + splitPath.file + namenszusatz + splitPath.ext;
            fso.CopyFile(path,outName);
                       
            // jetzt wird das JPG gespeichert mit der original-qualität
            if (!FF_SaveImage(path, 98)) continue;
            if (DEBUG) FF_MessageBox("Nach FF_SaveImage(path, 98)", 0);
           
            // bearbeitungshistorie als usercomment im exif
            tmp = FF_GetHistory();
            tmp == "" ? "" : tmp += CrLf;
            hist = SavedDate() + tmp;
           
            exi = FF_GetExifTag("UserComment")
            if (exi != "") exi += CrLf;                        //Wenn nicht leer
            if (DEBUG) FF_MessageBox(exi + hist, 0);
            FF_SetExifTag("UserComment", exi + hist);
            FF_SetExifTag("Software", GetFixFotoInfo());
            FF_SaveExif(path);
            if (DEBUG) FF_MessageBox("Nach FF_SaveExif(path)", 0);
       
            // datei datum aus exif datum setzen
            if (!FF_SetExifDate(path)) continue;
            if (DEBUG) FF_MessageBox("Nach FF_SetExifDate(path)", 0);
           
            // exif vorschau restaurieren
            FF_RestoreExifThumb(path);
            if (DEBUG) FF_MessageBox("Nach FF_RestoreExifThumb(path)", 0);
    
            FF_Reload();
           
            // das ist unbearbeitet
            FF_setDirty(false);
       
            // Fortschritt melden
            FF_SetProgress(i+1, imagenum)
        }
       
        FF_CloseDialog("AutocropMatchedJPEGs");
    }
    
    // Zerteilt einen Bild-Dateinamen in sein Pfadbestandteile
    function SplitPath(path) {
        var result = new Object();
        result.dir = fso.GetParentFolderName(path) + "\\";
        result.file = fso.GetBaseName(path);
        result.ext = "." + fso.GetExtensionName(path);
        return result;
    }
       
    function GetFixFotoInfo()
    {
        var s = "FixFoto Version ";
        s += FF_GetMajor() + ".";
        s += FF_GetMinor() + ".";
        s += FF_GetBuild();
        return(s);
    }
    
    function NumToString(n)
    {
        var s = n < 10 ? "0" : "";
        return (s += n.toString(10));
    }
    
    function SavedDate()
    {
        var s = "Bearbeitet: ";
        var d = new Date();                                        //System-Datum
        s += d.getDate() + ".";
        s += (d.getMonth() + 1) + ".";
        s += d.getFullYear() + " ";
        s += NumToString(d.getHours()) + ":";
        s += NumToString(d.getMinutes()) + ":";
        s += NumToString(d.getSeconds());
        return (s + CrLf);
    }
     
  16. Niels1938

    Niels1938 Mitglied

    Dabei seit:
    15.05.03
    Beiträge:
    1.664
    Zustimmungen:
    1
    Hallo Harald.

    Zum herunterladen gibt es 'Bilder ausrichten' als V. 1.03 - aber dieses Thread zeigt nur bis V. 1.02
    und du hast das oben von Thomas in #34 vorgeschlagene Skript nicht kommentiert.

    Habe ich etwas verpasst ??

    Grüsse,
     

Diese Seite empfehlen