7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Illustrator】【効率化】Geminiと一緒にIllustratorのスクリプトを作ってみた

Posted at

AIと一緒にIllustratorのスクリプトを作る

今回は、上記の記事を参考に、Illustratorの作業で効率化したい箇所を解決するスクリプト作成に挑戦しました。
AIと何かを作ってみたい気持ちが先行しているので、他に解決方法があるかもしれません :bow:

効率化したい箇所の洗い出し

面倒だと思っていることです。
この辺は各々違うと思うので、読み飛ばしてもらって良いです :pray:
スクリプトで解決できるかわからないですが、メモとして :pencil:

  • 同じトンマナの画像をサイズ違いで作ることが多いので、サイズ違いのアートボードを複数持ったファイルを作成できるようにしたい
    • 似たような条件のファイルを複製して、別名保存してから作成すれば解決します
    • 似たような条件のファイルを探すのが面倒な時もあるので、ファイル名から判断して作ってくれないかなぁと思っている
  • テキストの垂直・水平比率の縦横比を維持できるようにしたい
  • 背景の装飾のレイヤーとテキスト情報のレイヤーをファイル作成時に作成してほしい
    • 参考記事の例と同じ感じでできそう
  • アートボードの名前をサイズとファイル名から判断して変更しておいてほしい
    • いつもimage-hogehoge_1200x630など、画像の作成目的(hoge)と画像サイズを使って命名しているが、いちいち打ち直すのが面倒
  • アートボードの再配置で、最後に手動で配置する手順をなくしたい

やってみる

テキストの垂直・水平比率の縦横比を維持できるようにしたい

今回は、一番単純そうかなと思ったので、上記をまずチャレンジしてみます

Geminiにお願いする

スクリプトは冒頭の記事を参考にしてます。

以下で指定するIllustratorのスクリプトを生成してください。

#内容
・テキストの垂直・水平比率の縦横比を維持の可否を切り替えられるようにするスクリプト

#デフォルトの指定
・デフォルト:垂直・水平比率の縦横比が維持された状態

Geminiの出力

#target illustrator
// Illustratorのテキストの垂直・水平比率の縦横比を切り替えるスクリプト

(function () {
    // ドキュメントが存在するか確認
    if (app.documents.length === 0) {
        alert("ドキュメントが開かれていません。");
        return;
    }

    var doc = app.activeDocument;
    var sel = doc.selection;

    // 選択オブジェクトが存在するか確認
    if (sel.length === 0 || !(sel instanceof Array)) {
        alert("テキストオブジェクトを選択してください。");
        return;
    }

    var changeCount = 0;
    
    // 選択された各オブジェクトをループ
    for (var i = 0; i < sel.length; i++) {
        var item = sel[i];

        // テキストフレームかどうか確認
        if (item.typename === "TextFrame") {
            var isKept = item.textRange.keepHorizontalVerticalRatio;

            // 比率を反転
            item.textRange.keepHorizontalVerticalRatio = !isKept;
            changeCount++;
        }
    }

    if (changeCount > 0) {
        alert("選択された" + changeCount + "個のテキストオブジェクトの垂直・水平比率の縦横比を切り替えました。");
    } else {
        alert("選択された中にテキストオブジェクトが見つかりませんでした。");
    }

})();

Illustratorで読み込んでみる

読み込むまでの手順は以下です(参考の記事で詳しく書かれています:pray:
読み込むためのファイル( jsx 形式)を用意して、Illustratorの、ファイル >スクリプト > その他のスクリプト から読み込みます。

読み込んだ結果

  • テキストオブジェクトを選択した状態じゃないと、スクリプトが読み込めない
  • 指示が悪くて、縦横比の維持を反転する内容になっていた

もう一度指示してみる

縦横比を維持している状態としていない状態の切替は難しそうだったので、切り離してみました

もう一度以下の要件でお願いします
以下で指定するIllustratorのスクリプトを生成してください。
最低限の内容を叶えるだけのスクリプトと期待する内容も含めたスクリプトの2つを作成してください

#最低限の内容

・テキストの垂直・水平比率の縦横比を維持できるようにするスクリプト

 ・(例)垂直比率を101%にすると、自動で水平比率も101%になる

#期待すること

・テキストの文字パネル詳細オプションから、縦横比を維持しない状態と切り替えられるようにする

・縦横比を維持しない状態:現状の仕様通り、垂直比率を101%にしても、水平比率は変わらない

出力したものを再度Illustratorに読み込ませてみる

#target illustrator

// 選択したテキストの垂直比率と水平比率を同期させるスクリプト

(function () {
    var doc = app.activeDocument;
    var sel = doc.selection;

    if (!sel || sel.length === 0) {
        alert("テキストオブジェクトを選択してください。");
        return;
    }

    var verticalRatio;
    var hasTextFrame = false;

    // 最初のテキストフレームから垂直比率を取得
    for (var i = 0; i < sel.length; i++) {
        var item = sel[i];
        if (item.typename === "TextFrame") {
            verticalRatio = item.textRange.verticalScale;
            hasTextFrame = true;
            break;
        }
    }

    if (!hasTextFrame) {
        alert("テキストオブジェクトを選択してください。");
        return;
    }

    // 選択されたすべてのテキストフレームの水平比率を最初のテキストフレームの垂直比率に合わせる
    for (var i = 0; i < sel.length; i++) {
        var item = sel[i];
        if (item.typename === "TextFrame") {
            item.textRange.horizontalScale = verticalRatio;
        }
    }

    alert("選択したテキストの水平比率を垂直比率に同期しました。");

})();

結果

  • 文字パネルの設定を直接操作するのはできない(Gemini様の回答)
    • Illustratorのスクリプト(JSX)は、ドキュメント内のオブジェクト(レイヤー、パス、テキストフレームなど)や、アプリケーションのグローバルな設定を操作する機能は提供していますが、UIパネルの表示状態や設定項目(文字パネルやアピアランスパネルなど)を直接変更するAPIは公開されていません。

  • 二回目の出力で、挙動自体は問題なかった
    • 選択した文字の水平比率と垂直比率がずれていた場合、スクリプトを実行すると比率が大きい方に揃う
  • 複数のテキストオブジェクトを一括で正しい比率にしたいときとかには使える...かも?

GeminiとIllustratorのスクリプトを作った感想

結果的に、あまり使えないものを作ってしまいました。
スクリプトが文字パネルなどの設定項目を直接操作できないことを知らなかったのも良くなかった...
スクリプトを作るお題が悪かったかもですが、以下学びです。


  1. スクリプトの作成を依頼する時に、まず現実的にできるかを聞くべき
    • 細かくやりたいことを出すことができるかの判断に関わるので大事
  2. 動くものは作ってくれる!
    • 記事で読んではいましたが、実際やってみて実感しました
    • 自分でコードを書く必要なく、やりたいことをお願いするだけ
  3. 指示が大事!
    • 自分の場合、指示を大雑把に投げて、やりたいことを伝えるのに逆に時間がかかってしまうことがある
    • まず、要件をちゃんと考えて最初から詳細に伝えてあげるのが大事

Illustratorで効率化したいことがあれば、ぜひ試してみてください!!

Illustratorに関わらず、何かのツールで効率化したいことがあれば、AIに相談してみようと思いました :thumbsup:

参考

7
2
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
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?