Я изо всех сил пытался найти ответ в документации ( 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;
}
Заранее спасибо.