blog/
Поменять картинки местами в InDesign
Нашёл скрипт, который меняет две картинки местами. Больше ничего: просто две картинки местами. Найдено вот тут, там ещё есть. Сойдёт как пример того, что можно делать в jsx.
Скрипт swapimages.jsx:
// DESCRIPTION: SwapImages // Based on Gerald Singelmann's Swap images startupscript // http://indesign-faq.de/en/swapping_images_en // var mySelection = app.selection; if (mySelection.length == 2 && mySelection[0].allGraphics.length > 0 && mySelection[1].allGraphics.length > 0) { if (mySelection[0].allGraphics[0].itemLink.status == LinkStatus.NORMAL && mySelection[1].allGraphics[0].itemLink.status == LinkStatus.NORMAL) { var firstLink = mySelection[0].allGraphics[0].itemLink.filePath; var secondLink = mySelection[1].allGraphics[0].itemLink.filePath; mySelection[0].place(secondLink); mySelection[1].place(firstLink); } else { alert("This cannot work with images whose status is not up-to-date"); } } else { alert("Please select two image frames"); }
Как обычно, надо сохранить код в файл swapimages.jsx из любого текстового редактора (например, блокнот).
Однако, пока разбирался с этим скриптом, нашел новую версию исходного startup-скрипта (его надо установить в папку Startup Scripts — если ее нет, ее надо создать рядом с папкой Scripts Panel в папке Scripts) от Геральда Зингельманна вот тут.
Этот скрипт ещё лучше: там есть вариативность и возможность вызывать команду из контекстного меню. Скачать можно вот тут, из репозитория на git.
На всякий случай, оставлю тут код английской версии.
Скрипт swapImages_en.jsx от Gerald Singelmann:
/* ---------------------------------------------------------------------------------- Bilder tauschen Description:Three methods to change places of images [Ver. 1] [Autor: Gerald Singelmann. ] [Lang: DE] [Getestet mit: InDesign CC2019] [Creat: 19-08-29] Bugs & Feedback : gerald{at}cuppascript{dot}com www.cuppascript.com ---------------------------------------------------------------------------------- */ #targetengine "singel" ContextPlace(); function ContextPlace(){ var myLayoutContextMenu = app.menus.item("$ID/RtMouseLayout"); var myTextContextMenu = app.menus.item("$ID/RtMouseText"); try{ var mySwapAction = app.scriptMenuActions.item("swap images"); mySwapAction.name; } catch(myError){ var mySwapAction = app.scriptMenuActions.add("swap images"); } try{ var mySwapAction2 = app.scriptMenuActions.item("swap frames"); mySwapAction2.name; } catch(myError){ var mySwapAction2 = app.scriptMenuActions.add("swap frames"); } try{ var mySwapAction3 = app.scriptMenuActions.item("reload place gun"); mySwapAction3.name; } catch(myError){ var mySwapAction3 = app.scriptMenuActions.add("reload place gun"); } var myEventListener = mySwapAction.eventListeners.add("onInvoke", swapImages, false); var myEventListener2 = mySwapAction2.eventListeners.add("onInvoke", swapPlaces, false); var myEventListener3 = mySwapAction3.eventListeners.add("onInvoke", loadCursor, false); var myLSep = myLayoutContextMenu.menuSeparators.add(); var myLPlaceMenuItem = myLayoutContextMenu.menuItems.add(mySwapAction); var myLPlaceMenuItem2 = myLayoutContextMenu.menuItems.add(mySwapAction2); var myLPlaceMenuItem3 = myLayoutContextMenu.menuItems.add(mySwapAction3); function swapImages(myEvent){ try { var mySelection = app.selection; if (mySelection.length == 2 && mySelection[0].allGraphics.length > 0 && mySelection[1].allGraphics.length > 0) { if (mySelection[0].allGraphics[0].itemLink.status == LinkStatus.NORMAL && mySelection[1].allGraphics[0].itemLink.status == LinkStatus.NORMAL) { var firstLink = mySelection[0].allGraphics[0].itemLink.filePath; var secondLink = mySelection[1].allGraphics[0].itemLink.filePath; mySelection[0].place(secondLink); mySelection[1].place(firstLink); } else { alert("At least one image link is missing."); } } else { alert("Please select two image frames"); } } catch(e) {} } function swapPlaces(myEvent){ try { var mySelection = app.selection if (mySelection.length == 2) { var gb1 = mySelection[0].geometricBounds; var gb2 = mySelection[1].geometricBounds; switch(app.activeDocument.layoutWindows[0].transformReferencePoint) { case AnchorPoint.TOP_LEFT_ANCHOR: var x1 = gb1[1]; var x2 = gb2[1]; var y1 = gb1[0]; var y2 = gb2[0]; break; case AnchorPoint.TOP_CENTER_ANCHOR: var x1 = gb1[1] + (gb1[3] - gb1[1])/2; var x2 = gb2[1] + (gb2[3] - gb2[1])/2; var y1 = gb1[0]; var y2 = gb2[0]; break; case AnchorPoint.TOP_RIGHT_ANCHOR: var x1 = gb1[3]; var x2 = gb2[3]; var y1 = gb1[0]; var y2 = gb2[0]; break; case AnchorPoint.LEFT_CENTER_ANCHOR: var x1 = gb1[1]; var x2 = gb2[1]; var y1 = gb1[0] + (gb1[2] - gb1[0])/2; var y2 = gb2[0] + (gb2[2] - gb2[0])/2; break; case AnchorPoint.CENTER_ANCHOR: var x1 = gb1[1] + (gb1[3] - gb1[1])/2; var x2 = gb2[1] + (gb2[3] - gb2[1])/2; var y1 = gb1[0] + (gb1[2] - gb1[0])/2; var y2 = gb2[0] + (gb2[2] - gb2[0])/2; break; case AnchorPoint.RIGHT_CENTER_ANCHOR: var x1 = gb1[3]; var x2 = gb2[3]; var y1 = gb1[0] + (gb1[2] - gb1[0])/2; var y2 = gb2[0] + (gb2[2] - gb2[0])/2; break; case AnchorPoint.BOTTOM_LEFT_ANCHOR: var x1 = gb1[1]; var x2 = gb2[1]; var y1 = gb1[2]; var y2 = gb2[2]; break; case AnchorPoint.BOTTOM_CENTER_ANCHOR: var x1 = gb1[1] + (gb1[3] - gb1[1])/2; var x2 = gb2[1] + (gb2[3] - gb2[1])/2; var y1 = gb1[2]; var y2 = gb2[2]; break; case AnchorPoint.BOTTOM_RIGHT_ANCHOR: var x1 = gb1[3]; var x2 = gb2[3]; var y1 = gb1[2]; var y2 = gb2[2]; break; } var diff = [x1-x2, y1-y2]; mySelection[1].move(undefined, diff); diff[0] = diff[0]*-1; diff[1] = diff[1]*-1; mySelection[0].move(undefined, diff); } else { alert("Please select two image frames"); } } catch(e) {} } function loadCursor(myEvent){ try { var mySelection = app.selection; var loadedImages = new Array(); for (var n = 0; n < mySelection.length; n++) { for (var m = 0; m < mySelection[n].allGraphics.length; m++) { if (mySelection[n].allGraphics[m].itemLink.status == LinkStatus.NORMAL) { loadedImages.push( File(mySelection[n].allGraphics[m].itemLink.filePath)); mySelection[n].allGraphics[m].remove(); } } } if (app.selection.length == 1) { app.select(NothingEnum.NOTHING); } app.place(loadedImages); } catch(e) {} } }
А если вы хотите научиться круто работать в InDesign, вы можете записаться к нам на курс вёрстки для архитекторов.
Может быть интересно:
- Урок — Буквы от больших к маленьким в InDesign
- Скрипт для выбора победителя в инстаграме (из лайков)
- Копировать и отразить направляющие в InDesign
- Скрипт для выбора победителя в инстаграме (из комментариев)
- Calculate inclination of a roof valley with Python