无需在 PS 中打开图像即可获取图像的宽度和高度 - CS6 脚本

Getting width and height of image without need of opening it in PS - CS6 script

我努力在文档中搜索答案 (1, 2),但找不到任何人。

考虑到我们有来自某个文件夹的文件数组硬盘。我们想根据其文件的尺寸过滤此数组中的这些文件。
这意味着,过滤两侧(宽度或高度)比某个值更高的图像 同时比某个值低

当然我们可以在[=46中打开每个文件=] 为 Document 并通过 属性 app.activeDocument.widthapp.activeDocument.height 检查每一个并选择最高的一个并匹配它。但它效率极低,尤其是当我们有数百个文件,但只有少数文件符合条件时。

所以我的问题是:
有没有可能在不打开图像的情况下检查widthheight

如果不需要安装第 3 方软件就可以做到这一点,那就太好了。
如果没有,那么您不必手动安装它(一些独立版本)会很棒。
即使不满足上述条件,有总比没有好。

代码:

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

提前致谢。

不确定您要寻找什么样的答案,因为您似乎想写 Javascript 但您不希望 Photoshop 打开您的图像,所以我想建议您可以使用 ImageMagick 可以在终端(命令提示符)中轻松获取所有 JPEG/PNG 图像的宽度和高度,如下所示:

magick identify -format "%hx%w - %f\n" *.jpg *.png
1936x2592 - iphone.jpg
100x100 - lime.jpg
600x600 - out.jpg
400x400 - paddington.jpg
100x100 - red.jpg
1936x2592 - result-fft.jpg
50x50 - result.jpg
178x178 - 1.png
178x178 - 2.png

请注意,PSD 和 TIFF 文件通常有多个图层,因此您可能需要在其中为这些类型添加图层编号:

magick identify -format "%hx%w - %f[%s]\n" *psd *tif
768x1024 - a.psd[0]
768x1024 - a.psd[1]
248x1280 - a.tif[0]