Поменять картинки местами в InDesign

Ivan @ 14 / 11 / 2020 @ InDesign / Вёрстка / Скрипты
( / / )

Время чтения: ~ 13 мин.

Нашёл скрипт, который меняет две картинки местами. Больше ничего: просто две картинки местами. Найдено вот тут, там ещё есть. Сойдёт как пример того, что можно делать в 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, вы можете записаться к нам на курс вёрстки для архитекторов.


Может быть интересно:


Подпишитесь на нас в социальных сетях!

Instagram
VK
Facebook
YouTube!
Telegram!

Подпишитесь на обновления



* нажимая на кнопку «Подписаться», вы даете согласие на обработку своих персональных данных