Как вы модифицируете этот скрипт для запуска TinyPNG на открытых файлах вместо того, чтобы использовать диалог открытия для выбора файла? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь изменить этот скрипт, чтобы сжать, а затем закрыть все открытые файлы с помощью плагина TinyPNG Photoshop, а не выбирать один файл за раз в открытом диалоговом окне. Они предлагают другой сценарий, который позволяет сжать всю папку. Тем не менее, мне нужно сжать 10 из 50 изображений в папке, поэтому я предпочел бы просто выбрать эти 10 или открыть эти 10 и запустить скрипт на всех открытых файлах.

Я пытался заменить

compressFile(File.openDialog("Choose a PNG or JPEG file to compress")

с

compressFile(app.activeDocument)

при попытке сценария просто сжать текущий документ.

Вместо использования активного документа он просто переходит к улову (ошибка).

try {
    // Compress Active File
    compressFile(File.openDialog("Choose a PNG or JPEG file to compress"));
} catch(error) {
    alert("No JPEG or PNG file selected or compression error.");
}

1 Ответ

2 голосов
/ 09 мая 2019

compressFile() требуется объект File, в то время как activeDocument является объектом document.

Для открытых документов вам потребуется цикл по документам:

for (var i = documents.length - 1; i >= 0; i--) {
    activeDocument = documents[i];
    compressFile()
}

и в compressFile() вы должны избавиться от opener части (поскольку все документы уже открыты), но вам нужно заменить file на фактический путь к документу:

    // Compress the document
    var tinify = new ActionDescriptor();
    tinify.putPath(charIDToTypeID("In  "), new File(activeDocument.path + "/" + activeDocument.name)); /* Overwrite original! */
    tinify.putUnitDouble(charIDToTypeID("Scl "), charIDToTypeID("#Prc"), percentage);

Для файлового диалога вы можете просто изменить последний бит Compress File.jsx:

//dialogue to select multiple files:
var startFolder = Folder.myDocuments,
    myFiles = startFolder.openDlg(void(0), void(0), true);

if (myFiles != null) //if the dialogue wasn't cancelled
{
    //launch compressFile for every selected file
    for (var i = myFiles.length - 1; i >= 0; i--)
    {
        compressFile(myFiles[i])
    }
}
...