☂
Etusivulle
  • Info
  • Notes
  • Maisema
  • Luonto
  • Ihmiset
  • Lemmikit
  • Naapurusto
  • Maaseutu
  • Kaupunki
  • Autiot
  • Mustavalko
  • Kuvasarjat
  • Vaihda teema
Notes / Automaattinen tapa yhdistää dronekuvat monesta alikansiosta Photoshopissa (Script)

Automaattinen tapa yhdistää dronekuvat monesta alikansiosta Photoshopissa (Script)

Ongelma

Jotkin Dronet tallentavat kuvat erillisiin alikansiohin kansioihin. Kuvien manuaalinen valitseminen ja yhdistäminen voi viedä aikaa.

Ratkaisu

Photoshop-skripti, joka automaattisesti käy läpi valitun kansion alakansiot ja yhdistää niistä kuvat. Tämä skripti käyttää Photomerge-toimintoa.

Asennusohjeet

  1. Kopioida koodin tästä postauksesta ja tallentaa sen haluamalla nimellä .jsx-muodossa.
  2. Siirrä ladattu tiedosto suoraan Photoshopin Presets/Scripts -kansioon.
  3. Scriptin pitäisi löytyä nyt kohdasta File > Scripts

Skripti

Tämä Adobe Photoshop -skripti on suunniteltu automatisoimaan drone-kuvien yhdistäminen panoraamoiksi. Skripti käy läpi valitun kansion alakansiot, avaa kunkin kansion kuvat, yhdistää ne Photomerge-toiminnolla ja tallentaa tulokset valittuun kohdekansioon.

Skriptin rakenne

  1. Photomerge-skripti
    • Sisällyttää Photomerge.jsx ja siihen liittyvät skriptit, jotta Photomerge-toiminto voidaan käyttää.
  2. Päätoiminto
    • main: Hallitsee koko työnkulkua. Näyttää asetusten valintadialogin, kutsuu kansioiden käsittelytoiminnon ja ilmoittaa, kun kaikki panoramat on käsitelty ja tallennettu.
  3. Käyttöliittymäasetukset
    • showDialog: Näyttää käyttäjälle dialogin, jossa voi valita lähdekansion, kohdekansion, tiedostonimen etuliitteen ja yhdistämistyypin. Palauttaa asetukset objektina, joka sisältää kaikki valinnat.
  4. Kansioiden käsittely
    • processFolders: Käy läpi valitun kansion alakansiot. Jos kansiossa on kuvatiedostoja, kutsuu funktiota, joka yhdistää kuvat panoraamaksi.
  5. Panoraaman luominen
    • createPanorama: Avaa kunkin kuvan, yhdistää ne Photomerge-toiminnolla ja tallentaa lopputuloksen JPEG-tiedostona valittuun kohdekansioon.
// Include Photomerge.jsx and related scripts
var runphotomergeFromScript = true;
//@include "Photomerge.jsx"

// Main function to control the workflow
function main() {
    var settings = showDialog();
    if (settings) {
        var baseFolder = new Folder(settings.sourceFolder);
        var outputFolder = new Folder(settings.outputFolder);
        if (!outputFolder.exists) {
            outputFolder.create();
        }
        processFolders(baseFolder, outputFolder, settings);
        alert("All panoramas have been processed and saved successfully."); 
    } else {
        alert("No settings returned from the dialog.");
    }
}

// Show dialog to get user settings
function showDialog() {
    var dialog = new Window("dialog", "Panorama Image Joiner || Beta 0.0001");
    var instructions = "Instructions:\n" +
        "1. Select the folder where the panorama images are located. Each panorama's images should be in their own sub-folder.\n" +
        "2. Select the folder where the panoramas will be saved.\n";
    dialog.add("statictext", undefined, instructions, { multiline: true });

    var sourceFolderLabel = dialog.add("statictext", undefined, "Select Source Folder:");
    var sourceInput = dialog.add("edittext", undefined, "", { multiline: false });
    sourceInput.size = [180, 20];
    dialog.add("button", undefined, "Browse...").onClick = function() {
        var selectedFolder = Folder.selectDialog("Select the source folder");
        if (selectedFolder) sourceInput.text = selectedFolder.fsName;
    };

    var outputFolderLabel = dialog.add("statictext", undefined, "Select Output Folder:");
    var outputInput = dialog.add("edittext", undefined, "", { multiline: false });
    outputInput.size = [180, 20];
    dialog.add("button", undefined, "Browse...").onClick = function() {
        var selectedFolder = Folder.selectDialog("Select the output folder");
        if (selectedFolder) outputInput.text = selectedFolder.fsName;
    };

    var prefixLabel = dialog.add("statictext", undefined, "Enter Filename Prefix:");
    var prefixInput = dialog.add("edittext", undefined, "PANO_");
    prefixInput.size = [180, 20];

    // Merge type and additional options panel
    var mergeTypePanel = dialog.add("panel", undefined, "Merge Type:");
    var autoRadio = mergeTypePanel.add("radiobutton", undefined, "Auto");
    var prspRadio = mergeTypePanel.add("radiobutton", undefined, "Perspective");
    var cylindricalRadio = mergeTypePanel.add("radiobutton", undefined, "Cylindrical");
    var sphericalRadio = mergeTypePanel.add("radiobutton", undefined, "Spherical");

    // Dialog buttons
    var buttonGroup = dialog.add("group");
    buttonGroup.add("button", undefined, "OK").onClick = function() {
        dialog.close(1);
    };
    buttonGroup.add("button", undefined, "Cancel").onClick = function() {
        dialog.close(2);
    };

    if (dialog.show() === 1) {
        var mergeType = "Auto"; // Default to Auto
        if (prspRadio.value) mergeType = "Prsp";
        else if (cylindricalRadio.value) mergeType = "cylindrical";
        else if (sphericalRadio.value) mergeType = "spherical";

        return {
            sourceFolder: sourceInput.text,
            outputFolder: outputInput.text,
            mergeType: mergeType,
            prefix: prefixInput.text
        };
    }
    return null;
}


// Process each folder found in the base folder
function processFolders(baseFolder, outputFolder, settings) {
    var folders = baseFolder.getFiles(function(f) { return f instanceof Folder; });
    for (var i = 0; i < folders.length; i++) {
        var folder = folders[i];
        var files = folder.getFiles(/\.(jpg|jpeg|tif|tiff|psd|png)$/i);
        if (files.length > 0) {
            createPanorama(folder, files, outputFolder, settings);
        }
    }
}

// Create the panorama using the selected files and settings
function createPanorama(sourceFolder, files, outputFolder, settings) {
    var initialDocs = app.documents.length; 

    try {
        var fileArray = [];
        for (var i = 0; i < files.length; i++) {
            var file = files[i];
            fileArray.push(file);
            var openedFile = app.open(file);
            var openedDoc = app.activeDocument;
            openedDoc.selection.selectAll();
            openedDoc.selection.copy();
            if (i === 0) {
                app.documents.add(openedDoc.width, openedDoc.height);
            }
            app.activeDocument.paste();
            openedDoc.close(SaveOptions.DONOTSAVECHANGES);
        }

        if (fileArray.length > 0) {
            photomerge.alignmentKey = settings.mergeType;
            photomerge.advancedBlending = true;
            photomerge.lensCorrection = true;
            photomerge.removeVignette = true;
            photomerge.createPanorama(fileArray, false);
        } else {
            throw new Error("No images found to create the panorama.");
        }

        var finalDoc = app.activeDocument;
        var filename = settings.prefix + sourceFolder.name + ".jpg";
        var saveFile = new File(outputFolder + "/" + filename);
        var saveOptions = new JPEGSaveOptions();
        saveOptions.quality = 12;
        finalDoc.saveAs(saveFile, saveOptions, true, Extension.LOWERCASE);

    } catch (e) {
        alert("An error occurred during the panorama creation: " + e);
    } finally {
        while (app.documents.length > initialDocs) {
            app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
        }
    }
}

main();
JP - Get home
  • Info
  • Notes

Teemat Avaa grid-näkymä

  • Maisema
  • Luonto
  • Ihmiset
  • Lemmikit
  • Naapurusto
  • Maaseutu
  • Kaupunki
  • Autiot
  • Mustavalko

Kuvasarjat Avaa grid-näkymä

  • Alitajuntaiset tilat
  • Miina ja vuodenaikojen tanssi
  • Kolme naista, yksi vene
  • Horsitontaalisen häiriön kauneus ja tasapaino
  • Bereniken hiukset
  • Joensuun Kanervalan Selvaag-talot
  • Kuuma Kollektiivi / Tulentanssi 
  • Hss
  • Tohmajärven Teatteri – Onnen maa
  • Maisemapaikka
  • Valo
  • Dealing with emotions
  • Puu
  • Rakennettu todellisuus
  • Koiraparkki
  • Instacrap
  • Valontuoja
  • Random Sceneries from Poland
  • Kirkot
  • Ajan rinnakkain asettelu
  • Deep Black Landscape
  • Susun pieni vallankumous