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

Я пытаюсь изменить этот сценарий, чтобы сжать, а затем закрыть все открытые файлы с помощью плагина 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 ответ

Решение

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])
    }
}
Другие вопросы по тегам