Photoshop automatisieren – bei jeder Iteration etwas anders

Ich habe einen sich wiederholenden Prozess, den ich gerne in Photoshop automatisieren würde, aber ich befürchte, dass er einfach ein bisschen zu kompliziert ist.

Ich habe ungefähr 1000 Bilder eines Sonnenuntergangs, die jeweils im Abstand von ein paar Sekunden aufgenommen wurden (denken Sie an Zeitraffer).

Ich möchte 4 Pixel breite vertikale Streifen von jedem Foto nehmen und sie dann nebeneinander einfügen, sodass der Sonnenuntergang weiter voranschreitet, wenn Sie sich von links nach rechts über das Bild bewegen.

Die ersten 4 Pixel meines endgültigen Bildes stammen also von Bild 1, die zweiten 4 Pixel von Bild 2 usw.

Ich kann nicht herausfinden, wie ich eine Aktion erstellen kann, die jedes Mal anders ist, z. Wählen Sie einen 4 Pixel breiten Streifen bei Registrierungen, die jedes Mal um 4 Pixel erhöht werden.

Irgendwelche Ideen?

Antworten (2)

Sie müssen dazu Schleifen und Variablen innerhalb des Skripts verwenden. Angenommen, die Dateien werden nacheinander benannt, wie die meisten vernünftigen Kameras sie erzeugen würden, dann würde es auf der Höhe von 50.000 Fuß ungefähr so ​​aussehen:

//control variable, counts which photo you're on
var lcv = 0;

//how many photos are there?
var numPhotos = 1000;

//used to track the name of the file in the loop
var filename;
//used to track the shape to cut in the loop
var shapeRef;
//used to track the left and right edges of the slice
var leftEdge;
var rightEdge;

//main processing loop
for (lcv = 0; lcv < numPhotos; lcv++ ) {
    // process one image.
    filename = 'img_'+(lcv + 1234)+'.jpg';

    //open the file here... get it ready to cut from
    ...

    //create the selection box here, we'll use the LCV to control how far over we move
    leftEdge = lcv * sliceWidth;
    rightEdge = leftEdge + sliceWidth;
    shapeRef = [ [leftEdge, 0], //upper left
                 [rightEdge, 0], //upper right
                 [rightEdge, 3400], //lower right
                 [leftEdge, 3400] ]; //lower left

    // use the above shapeRef to first cut from the above opened file, then paste it into your master file.

    // close the file you opened above so we can move on to the next file

}

Ich habe oben einige Annahmen getroffen:

  1. Sie codieren in JS
  2. Das erste Bild ist die Nummer 1234, und sie gehen der Reihe nach mit Namen wie "img_1234.jpg"
  3. Die Datei ist 3400 Pixel hoch.
  4. Sie wissen bereits, wie Sie das Bild öffnen, das Slice ausschneiden und in ein anderes Bild einfügen. :)

Wenn das erste Paar keine legitimen Annahmen sind, passen Sie den Code nach Bedarf an. ;)

Wenn Sie weitere Hilfe bei der Syntax der Verwendung von Variablen benötigen, fallen Ihnen zwei Referenzen ein:

  1. Adobes Excellent Intro Scripting Guides
  2. JS-Ressourcen der W3-Schule oder der JS-Bereich des Mozilla Developers Center
Zusätzlich zu Ihren Referenzen ist hier ein Lesebegleiter für w3-Schulen, über den ich kürzlich gestolpert bin: w3fools.com
Kudos für die Bereitstellung einer Code-Übersicht zusätzlich zur Beantwortung der Frage!

Nur für diejenigen, die es interessiert, hier ist das endgültige Skript:

-- Script to merge 1043 images into a single image by taking slices and
-- reassembling them

-- Target Adobe Photoshop
tell application "Adobe Photoshop CS5"
    activate

    -- Create the ultimate document
    set uDocRef to make new document with properties {width:2848 as pixels, height:4288 as pixels}

    -- First image number of the series
    set firstNum to 868
    set lastNum to 1580
    set leftEdge to 0

    -- Step through each picture
    repeat with currentNum from firstNum to lastNum
        -- Open the image
        if currentNum is less than 1000 then
            set tCurrentNum to "0" & currentNum
        else
            set tCurrentNum to currentNum
        end if

        set filePath to ".../DSC_" & tCurrentNum & ".nef"
        with timeout of 300 seconds
            open alias filePath
        end timeout
        set wDocRef to current document

        -- Make a selection
        set rightEdge to leftEdge + 4
        --              top left        top right           bottom right            bottom left
        set shapeRef to {{leftEdge, 0}, {rightEdge, 0}, {rightEdge, 4288}, {leftEdge, 4288}}
        select wDocRef region shapeRef
        copy

        -- Paste the selection into the ultimate document
        set current document to uDocRef
        select uDocRef region shapeRef
        paste

        -- Close the image
        close wDocRef saving no

        -- Update the left edge position
        set leftEdge to rightEdge

    end repeat

end tell