Получение ширины и высоты изображения без необходимости открывать его в скрипте PS - CS6 - PullRequest
0 голосов
/ 12 февраля 2020

Я изо всех сил пытался найти ответ в документации ( 1 , 2 ), но не смог никого найти. Учтите, что у нас есть массив файлов из определенной папки на жестком диске. Мы хотим отфильтровать эти файлы в этом массиве в зависимости от размеров его файлов. Это означает, что фильтруйте изображения, у которых обе стороны (ширина или высота) на выше , чем какое-либо значение и ниже , чем какое-либо значение одновременно. Конечно, мы можем открыть каждый файл в PS как Document и проверить каждый по свойству app.activeDocument.width или app.activeDocument.height, выбрать самый высокий и сопоставить его. Но это крайне неэффективно , особенно когда у нас есть сотни файлов, но только немногие из них соответствуют условиям.

Итак, мой вопрос: Есть ли возможность проверить width и height, не открывая изображение? Если это возможно без необходимости установки стороннего программного обеспечения, это здорово. Если нет, то было бы здорово, чтобы вам не приходилось устанавливать его вручную (некоторые автономные версии). Даже если это условие не выполняется, лучше любое решение, чем никто.

код:

var sourceFolder = Folder.selectDialog("Select folder with files to process");

var LowestValueOfSides = 50; // Any arbitrary value

var HighestValueOfSides = 100; // Any arbitrary value

var FilesToProcess = getFilesToProcess(sourceFolder, LowestValueOfSides, HighestValueOfSides);

alert(FilesToProcess);

function getFilesToProcess(sourceFolder, LowestValueOfSides, HighestValueOfSides) {

    sourceFilesUnfiltered = sourceFolder.getFiles();
    var properFilesExtPSfiles = /.(jpg|tif|psd|bmp|gif|png)$/;

    var sourceFilesFilteredPSD = filteringSourceFilesByExtensions(sourceFilesUnfiltered, properFilesExtPSfiles);

    var sourceFilesFilteredByRes = filteringSourceFilesByRes(sourceFilesFilteredPSD, LowestValueOfSides, HighestValueOfSides);

    return sourceFilesFilteredByRes;
}

function filteringSourceFilesByExtensions(sourceFilesUnfiltered, properFilesExtPSfiles) {

    var sourceFilesFiltered = new Array;

    for (var i = 0; i < sourceFilesUnfiltered.length; i++) { 
        if (sourceFilesUnfiltered[i] instanceof File) {

            var sourceFilePathString = sourceFilesUnfiltered[i].toString();

            var sourceFileToMatch = decodeURIComponent(sourceFilePathString);

            if (sourceFileToMatch.match(properFilesExtPSfiles)) {// decodeURIComponent(), to avoid problem when you have special signs in source files

                sourceFilesFiltered.push( File(sourceFilePathString) );
            } 
        } 
    }

    return sourceFilesFiltered;
}

function filteringSourceFilesByRes(sourceFilesFilteredPSD, LowestValueOfSides, HighestValueOfSides) {

    var sourceFilesFilteredByRes = new Array;

    for (var i = 0; i < sourceFilesFilteredPSD.length; i++) {

        var longestSide = getLongestSideValue(sourceFilesFilteredPSD[i]); //   <====== this is function which I have problem

        if ( (longestSide >= LowestValueOfSides) && (longestSide <= HighestValueOfSides)) {
            sourceFilesFilteredByRes.push(sourceFilesFilteredPSD[i]);
        }
    }

    return sourceFilesFilteredByRes;
}

function getLongestSideValue(File) { //   <====== this is function which I have problem

    var FileWidth // <===== I need this value
    var FileHeight // <===== I need this value

    var longestSideValue = Math.max(FileWidth, FileHeight);

    return longestSideValue;
}

Заранее спасибо.

...