Автоматизация Photoshop — немного отличается в каждой итерации

У меня есть повторяющийся процесс, который я бы очень хотел автоматизировать в Photoshop, но боюсь, что он слишком сложен.

У меня есть около 1000 фотографий заката, каждая из которых сделана с разницей в пару секунд (подумайте о таймлапсе).

Я хочу взять вертикальные полосы шириной 4 пикселя с каждой фотографии, а затем вставить их рядом друг с другом, чтобы при движении слева направо по изображению закат продвигался дальше.

Таким образом, первые 4 пикселя моего окончательного изображения взяты из изображения 1, вторые 4 пикселя из изображения 2 и т. д.

Я не могу понять, как создать действие, которое каждый раз отличается, например. выберите полосу шириной 4 пикселя при регистрации, увеличивая каждый раз на 4 пикселя.

Любые идеи?

Ответы (2)

Для этого вам нужно будет использовать циклы и переменные в скрипте. Предполагая, что файлы названы последовательно, так как большинство нормальных камер будут генерировать их, тогда это будет выглядеть примерно так на высоте 50 000 футов:

//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

}

Я сделал некоторые предположения выше:

  1. вы пишете на JS
  2. первое изображение имеет номер 1234, и они идут по порядку с такими именами, как "img_1234.jpg"
  3. файл имеет высоту 3400 пикселей.
  4. вы уже знаете, как открыть изображение, вырезать фрагмент и вставить его в другое изображение. :)

Если первая пара не является допустимым предположением, скорректируйте код по мере необходимости. ;)

Если вам нужна дополнительная помощь по синтаксису использования переменных, на ум приходят две ссылки:

  1. Прекрасные руководства по написанию вступительных сценариев от Adobe
  2. JS-ресурсы школы W3 или раздел JS Центра разработчиков Mozilla.
В дополнение к вашим ссылкам, вот помощник по чтению в школах w3, на который я недавно наткнулся: w3fools.com
Престижность за предоставление схемы кода в дополнение к ответу на вопрос!

Просто для тех, кто заинтересован, вот окончательный сценарий:

-- 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