मैंने दस्तावेज़ीकरण में उत्तर खोजने के लिए संघर्ष किया (1, 2) लेकिन मुझे कोई नहीं मिला।

मान लें कि हमारे पास हार्ड ड्राइव में स्थित कुछ फ़ोल्डर से फाइलों की एक श्रृंखला है। हम इन फ़ाइलों को इसकी फ़ाइलों के आयामों के आधार पर इस सरणी में फ़िल्टर करना चाहते हैं।
अर्थात, उन छवियों को फ़िल्टर करें जो दोनों पक्षों (चौड़ाई या ऊंचाई) कुछ मान से अधिक हैं और< /strong> कम एक ही समय में कुछ मान से कम।

बेशक हम प्रत्येक फ़ाइल को 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;
}

अग्रिम में धन्यवाद।

1
Lukkar 12 फरवरी 2020, 18:32
क्या आपने वास्तविक हाइट/वास्तविक विड्थ की कोशिश की है? देखें यह पोस्ट
 – 
Rachel Gallen
12 फरवरी 2020, 19:30
उपरोक्त पोस्ट में वास्तविक विड्थ और वास्तविक हाइट केवल स्थानीय चर हैं जो एक ओपनएंड दस्तावेज़ को संदर्भित करते हैं जो सामान्य संपत्ति नहीं है। @Lukkar मुझे डर है कि open(file) का उपयोग करके फ़ाइल को प्रोग्रामिक रूप से खोलने का एकमात्र विकल्प है, .width.value का उपयोग करके इसकी चौड़ाई प्राप्त करें और इसे बाद में बंद करें।
 – 
obscure
12 फरवरी 2020, 19:39
1
सत्य। Adobe ने अभी इस उपयोग के मामले के बारे में नहीं सोचा था। फ़ाइल वर्ग में कुछ गुण हैं लेकिन निश्चित रूप से भौतिक आयाम नहीं हैं।
 – 
obscure
12 फरवरी 2020, 19:46
2
मैंने कोशिश नहीं की है, लेकिन शायद कुछ यह पोस्ट काम करेगी
 – 
Sergey Kritskiy
13 फरवरी 2020, 00:57

1 उत्तर

सबसे बढ़िया उत्तर

सुनिश्चित नहीं है कि आप किस प्रकार के उत्तर की तलाश कर रहे हैं क्योंकि आप जावास्क्रिप्ट लिखना चाहते हैं लेकिन आप नहीं चाहते कि फ़ोटोशॉप आपकी छवियों को खोले, इसलिए मैं आपको सलाह देना चाहता हूं कि आप प्राप्त करने के लिए ImageMagick का उपयोग कर सकते हैं टर्मिनल (कमांड प्रॉम्प्ट) में आपकी सभी जेपीईजी/पीएनजी छवियों की चौड़ाई और ऊंचाई आसानी से पर्याप्त है:

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]
2
Mark Setchell 13 मई 2020, 18:08
क्या Adobe's ExtendedScript में टर्मिनल (कमांड प्रॉम्प्ट) को लागू करना और उस पर तर्क देना संभव है?
 – 
Lukkar
14 मई 2020, 13:10
क्या आपका यह मतलब है? stackoverflow.com/a/26662083/2836621
 – 
Mark Setchell
14 मई 2020, 13:32
यह काम करता है लेकिन .... मेरे मामले में 'app.system ("कुछ विंडोज़ कमांड")' काम नहीं करता है। आपको बैट फ़ाइल बनानी होगी, जिसे बाद में आप [लिंक] ( stackoverflow.com/questions/35029039/…)
 – 
Lukkar
14 जून 2020, 20:35
var bat = new File("~/Documents/ps_test.bat"); bat.open('w'); bat.writeln('magick identify -format "%%hx%%w - %%f\\n" "D:\\some path\\file.png">"D:\\some path\\results.txt"'); bat.writeln("pause"); bat.close(); bat.execute();
 – 
Lukkar
14 जून 2020, 20:49
जो कोई बल्ले फ़ाइल बनाना चाहता है, उसके लिए एस्केप वर्णों के बारे में अतिरिक्त जानकारी jsx: जावास्क्रिप्ट, bat< /ए>
 – 
Lukkar
14 जून 2020, 21:00