无需在 PS 中打开图像即可获取图像的宽度和高度 - CS6 脚本
Getting width and height of image without need of opening it in PS - CS6 script
我努力在文档中搜索答案 (1, 2),但找不到任何人。
考虑到我们有来自某个文件夹的文件数组硬盘。我们想根据其文件的尺寸过滤此数组中的这些文件。
这意味着,过滤两侧(宽度或高度)比某个值更高的图像和 同时比某个值低。
当然我们可以在[=46中打开每个文件=] 为 Document
并通过 属性 app.activeDocument.width
或 app.activeDocument.height
检查每一个并选择最高的一个并匹配它。但它效率极低,尤其是当我们有数百个文件,但只有少数文件符合条件时。
所以我的问题是:
有没有可能在不打开图像的情况下检查width
和height
?
如果不需要安装第 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]
我努力在文档中搜索答案 (1, 2),但找不到任何人。
考虑到我们有来自某个文件夹的文件数组硬盘。我们想根据其文件的尺寸过滤此数组中的这些文件。
这意味着,过滤两侧(宽度或高度)比某个值更高的图像和 同时比某个值低。
当然我们可以在[=46中打开每个文件=] 为 Document
并通过 属性 app.activeDocument.width
或 app.activeDocument.height
检查每一个并选择最高的一个并匹配它。但它效率极低,尤其是当我们有数百个文件,但只有少数文件符合条件时。
所以我的问题是:
有没有可能在不打开图像的情况下检查width
和height
?
如果不需要安装第 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]