2
3

More than 1 year has passed since last update.

Adobe Illustrator用スクリプトの書き方

Last updated at Posted at 2022-11-18

イラストレーターをスクリプトで操作する機会があったので、備忘録としてまとめます。

言語はExtendScriptで、JavaScriptの書き方とほとんど同じですが、ECMAScript3に準拠しており、書き方が古いため注意が必要です。

スクリプト例

アートボードに四角のオブジェクトを追加

// アートボードのx軸20、y軸-30の位置に縦横100の四角のオブジェクトを追加
addRectangle(20, -30)

function addRectangle(x, y) {
  // アクティブのアートボードにグループアイテムを追加
  var groupItems = activeDocument.groupItems.add()
  // 縦横のサイズを12の四角に設定
  var rect = groupItems.pathItems.rectangle(0, 0, 100, 100)
  // 座標の設定
  rect.position = [x, y]
  // 枠線の有無
  rect.stroked = false

  // 色の生成(灰色の場合)
  var color = new RGBColor()
  color.red = 200
  color.green = 200
  color.blue = 200

  // 塗りつぶしの色の設定
  rect.fillColor = color
}

アートボードにテキストを追加

// アートボードのx軸20、y軸-30の位置にテキスト「Hello World」を追加
addText(20, -30, 'Hello World')

// テキストの追加
function addText(x, y, text) {
  // アクティブのアートボードにテキストのフレームを追加
  var pointText = activeDocument.textFrames.add()
  // 文字の追加
  pointText.contents = text
  // 座標の設定
  pointText.position = [x, y]
  // 文字サイズの設定
  pointText.textRange.characterAttributes.size = 12

  // 色の生成(赤色の場合)
  var color = new RGBColor()
  color.red = 255
  color.green = 0
  color.blue = 0

  // 文字色の設定
  pointText.textRange.characterAttributes.fillColor = color
}

JSON.stringifyを使えるように

下記サイトのjson2.jsファイルをダウンロードして、スクリプトファイルと同じディレクトリに配置する。

// JSON.stringifyを使用可能にするためのインポート
#include ./json2.js

var list = [
  {
    name: 'taro',
    age: 10
  },
  {
    name: 'hanako',
    age: 20
  }
]

var json = JSON.stringify(list)

データの保存

// 「Hello World」のテキストを保存
saveFile('Hello World')

function saveFile(text) {
  var file
  // 保存ダイアログを出す
  file = File.saveDialog('Export')
  file.open('w')
  file.write(text)
  file.close()
}

グループアイテムの座標を取得

var groupRefs = activeDocument.activeLayer.groupItems
var groupPositionList = getGroupPositionList(groupRefs)

// 取得例)
// [
//   {
//     "x": 20,
//     "y": -30
//   },
//   {
//     "x": 50,
//     "y": -100
//   }
// ]

// 全てのグループアイテムのx軸とy軸の座標を取得
function getGroupPositionList(groupRefs) {
  // 空の配列を用意
  var positionList = []

  for (var i = 0; i < groupRefs.length; i++) {
    // 対象のグループアイテム
    var targetRef = groupRefs[i]
    // x軸
    var x = targetRef.visibleBounds[0]
    // y軸
    var y = targetRef.visibleBounds[1]

    var payload = {
      x: x,
      y: y,
    }
    positionList.push(payload)
  }

  return positionList
}

まとめ

座標の取得は、手動だと数が多いと時間がかかりますが、スクリプトだと一瞬で取得できるので便利ですね。

参考サイト

最後に

GoQSystemでは一緒に働いてくれる仲間を募集中です!

ご興味がある方は以下リンクよりご確認ください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3