Illustratorの変更箇所を差分するスクリプト

最終更新日

なんか作れって言われたような気がしたのでコンセプトコードを書いてみました。
たしかに、校正箇所を手早く確認できれば日々の編集作業に安息をもたらすのは事実ですので、こういったものも意味はあるのでせう。具体的な動作はXの方に動画をあげてますので、そちらをご確認いただけたらと思います。

XユーザーのTen Aさん: 「Illustratorの変更箇所を確認するスクリプト… https://t.co/bciRhS5J0Q」 / X

使い方
1.このスクリプトの初回実行時に基本となるスクリーンキャプチャが保存されます。保存先はデスクトップに「capture」というフォルダを作成します。
2.2回目以降はひとつ前との差分を示すためにドキュメントに「checkLayer」というレイヤーを作成して、キャプチャを配置して差分表示します。
3.確認ができたらレイヤーごと破棄してください。

(function()
{
  var dc = app.activeDocument;
  var tgt = dc.artboards[0];
  var fdr = Folder("~/Desktop/capture");
  if (!fdr.exists) fdr.create();
  var pref = "/" + dc.name + "_"; 
  var n = 0;
  if (dc.XMPString.indexOf("ai_capture")>0)
  {
    n = getDocumentTag(dc);
    n++;
    setDocumentTag(dc, n);
  }
  else
  {
    setDocumentTag(dc, n);
  }

  var fileName = fdr + pref + n + ".png";
  cauture(fileName, dc.artboards[0]);
  if(n>0)
  {
    try
    {  
      var lyr = activeDocument.layers.getByName("checkLayer");
    }
    catch(e)
    {
      var lyr = app.activeDocument.layers.add();
      lyr.name = "checkLayer";
    }
    var im0 = lyr.placedItems.add();
    var fn = fdr + pref + (n-1).toString() + ".png";
    im0.file = new File(fn);
    im0.top = 0;
    im0.left = 0;
    var im1 = lyr.placedItems.add();
    fn = fdr + pref + n.toString() + ".png";
    im1.file = new File(fn);
    im1.top = 0;
    im1.left = 0;
    im1.blendingMode = BlendModes.DIFFERENCE;
  }

  function getDocumentTag(dc)
  {
    var xmp = dc.XMPString;
    var xmpMeta = new XMPMeta(app.activeDocument.XMPString);
    var ns = "http://ten-artai.com/tags/";
    var tag = xmpMeta.getProperty(ns, "version").toString();
    return Number(tag);
  }


  function setDocumentTag(dc, num)
  {
    var xmp = dc.XMPString;
    if (ExternalObject.AdobeXMPScript == undefined) 
    {
      ExternalObject.AdobeXMPScript = new ExternalObject("lib:AdobeXMPScript");
    }
    var xmpMeta = new XMPMeta(xmp);
    var ns = "http://ten-artai.com/tags/";
    var prefix = "ai_capture";
    XMPMeta.registerNamespace(ns, prefix);
    xmpMeta.setProperty(ns, "version", num.toString());
    dc.XMPString = xmpMeta.serialize();
  }

  function cauture(fileName, targetArtboard)
  {
    var captureOpts = new ImageCaptureOptions;
    captureOpts.matte = true;
    captureOpts.antiAliasing = true;
    captureOpts.resolution = 600;
    app.activeDocument.imageCapture (File(fileName), targetArtboard.artboardRect, captureOpts);
  }
})();

この様に前回実行時のキャプチャと差分がビジュアル的に表示されます。着色状態によっては差分が分かりにくい場合がありますのでカラーデータでの利用時はご注意ください。

現状はコンセプトコードレベルですが、そういった点の改善や高機能化も考え中ですのでお待ちいただけたらと思います。

あと、captureフォルダ内に蓄積したファイルは適宜削除ください。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする