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
