Oleg Butrin
20 лет на форуме
- Сообщения
- 1 993
- Реакции
- 1 224
var myLink = app.activeDocument.allGraphics[0].itemLink;
var pic = myLink.filePath;
var resizeShop = "";
resizeShop += " var pic='"+pic+"'\r";
resizeShop += " app.open(File(pic));\r";
resizeShop += " app.activeDocument.resizeImage(app.activeDocument.width + 1, app.activeDocument.height + 1, 300, ResampleMethod.BICUBICSMOOTHER);\r";
resizeShop += " app.activeDocument.close(SaveOptions.SAVECHANGES);\r"
resizeShop += " pic.toSource();";
var bt = new BridgeTalk();
bt.target = "photoshop";
bt.body = resizeShop;
bt.onResult = function(resultMsg) {
app.waitForAllTasks();
myLink.update();
if (myLink.status) {myLink.update()};
}
bt.send(100000);
но опять-же — тут введена пауза. именно поэтому — чтобы не вводить паузы — я сделал не сплошной скрипт с ожиданием обработки картинки (тем более, что у нас бывают картинки, которые образмериваются по 5-6 минут — какую паузу ставить? 5 минут? и материал с 100 картинок будет висеть сутки? 10 секунд? и в двух третях случаев скрипт будет игнорировать изменения, потому что картинка ещё не сохранилась?), а с вызовом индизайна обратно через тот-же bt.send. и вся асинхронность прекрасно становится совершеннейшей синхронностью и последовательностью.Смысл скорее не сермяжный, а сакральный.
Если просто вызывать update(), то не работает. Если, например, до апдейта вызвать окно alert, то работает. Ну и вот так, как сделал - у меня работает.
и в двух третях случаев скрипт будет игнорировать изменения, потому что картинка ещё не сохранилась?
адаптировал свой код для наглядности, и получилось вот что:Экспериментальным путем был получен работающий вариант:...
var targets = BridgeTalk.getTargets(null,null);
var shps = new Array();
for (var q=0;q<targets.length;q++)
if (targets[q].toLocaleLowerCase().indexOf("hotoshop")>=0) shps.push(targets[q]);
var myDialog = app.dialogs.add();
with (myDialog.dialogColumns.add())
{
with (dialogRows.add().borderPanels.add().dialogColumns.add())
{
dialogRows.add().staticTexts.add({staticLabel: "выберите фотошоп"});
var kName = dialogRows.add().dropdowns.add({stringList: shps, selectedIndex: 0});
}
}
if (!myDialog.show()) {exit();};
var shopVersion=shps[kName.selectedIndex];
var indisVersion = "indesign-"+app.version;
var pic = app.documents[0].allGraphics[0].itemLink.filePath;
var resizeShop = "";
resizeShop += " var pic='"+pic+"'\r";
resizeShop += " app.open(File(pic));\r";
resizeShop += " activeDocument.resizeImage(activeDocument.width-1, activeDocument.height-1, 300, ResampleMethod.BICUBICSMOOTHER);\r";
resizeShop += " app.activeDocument.close(SaveOptions.SAVECHANGES);\r"
var bt = new BridgeTalk;
bt.target = shopVersion;
bt.body = resizeShop;
bt.onResult = function(resultMsg)
{
app.waitForAllTasks();
app.documents[0].allGraphics[0].itemLink.update();
alert('ok');
}
bt.send(1000);
alert('neok');