Как вы модифицируете этот скрипт для запуска 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])
}
}