Skip to main content
k_oshiro
Community Expert
Community Expert
March 12, 2025
Answered

複数のSVGファイルをレイヤーとして読み込みたい(まとめたい)

  • March 12, 2025
  • 2 replies
  • 1554 views

こんにちは。
連番名の複数SVGファイルを各レイヤーとして一つのAIファイルとしてまとめたいと思っています。
Adobe Photoshopではファイル→スクリプト→ファイルをレイヤーとして読み込みで可能です。

しかし、Photoshopでは、ベクターデータとしての編集が不便なので、できればIllustratorで同様のことができればいいと思っています。
数ファイルならコピペで対応可能ですが、数十ファイルとなると手間なのでスクリプトなどがあれば無料、有料含めて教えていただきたいです。
よろしくお願いします。

 

参考にした記事

https://community.adobe.com/t5/illustrator%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A9%E3%83%A0-discussions/%E8%A4%87%E6%95%B0%E3%81%AEai%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%921%E3%81%A4%E3%81%AEai%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E7%BA%8F%E3%82%81%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF/td-p/13126076?profile.language=ja

 

macOS 15.3.1

illustrator 29.3.1

 

Correct answer ajabon grinsmith

エモくない内容(フィルタリングやエラー処理をしないもの)でよければささっと書いちゃうか、と思って

ちょっと書いてみたんですが、

document.placedItems.add(svgファイル) だとドキュメント上に実体が出てきませんね…

1つずつ開いてコピペ、をループでやる形しかないのかな。

var doc = app.activeDocument;
var svgs = File.openDialog("svgファイルを選択しなければ", true, true);

for(var i = 0; i < svgs.length; i++){
    var newLayer = doc.layers.add();
    doc.activeLayer = newLayer;
    app.open(svgs[i]);
    app.executeMenuCommand("unlockAll");
    app.executeMenuCommand("selectall");
    app.executeMenuCommand("copy");
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    app.executeMenuCommand("paste");
    app.executeMenuCommand("deselectall");
}

 

既存の開かれたドキュメントがある状態で実行、

ファイル選択ダイアログが出るので複数のファイルを選択(フィルタリングしていません)

ループ{

 レイヤーを1つ追加してアクティブに

 選択された i  個めのファイルを開く、すべてを選択、コピー、保存せず閉じる

 (元のドキュメント上に)ペースト、選択を解除

 

という内容です。既存ドキュメントありきなので新規ドキュメントの場合は最初からある「レイヤー 1」が出番なしとなります。

 

こまかい要望があれば追記してみてください。

2 replies

Ten A
Community Expert
Community Expert
March 12, 2025

SVGの配置は処理が特殊でSVGを認識したらページオブジェクトに落とす処理がかかります。スクリプトからはこの処理を通せなくて弾かれます。
おそらくアクション経由なら大丈夫なのでSVG読み込むところだけアクションコードを噛ませる形でスクリプトを書くことは出来ると思います。

k_oshiro
Community Expert
k_oshiroCommunity ExpertAuthor
Community Expert
March 12, 2025

Ten Aさん
アドバイスありがとうございます。ajabon grinsmith氏が書いてくださったスクリプトで希望の処理が行えました。
1)事前にイラレ形式で読み込んだ01番のSVGを保存する必要がある
2)SVGファイルを全部イラレで開いておく必要がある
等、準備がありますが、時短の目的は達せられました。

k_oshiro(AdobeCommunityExpert)
ajabon grinsmith
Community Expert
Community Expert
March 13, 2025

あ、ご満足のところ蒸し返してすみません

 

> 1)事前にイラレ形式で読み込んだ01番のSVGを保存する必要がある
> 2)SVGファイルを全部イラレで開いておく必要がある

 

手元に手頃なSVGファイルがなかったため、手前味噌でIllustratorで作成・保存したSVGファイルを相手に動作確認をしたのですが、よそでできたSVGでは「ダイアログ上でファイル選択」の流れでは動作しないということでしょうか?

ajabon grinsmith
Community Expert
ajabon grinsmithCommunity ExpertCorrect answer
Community Expert
March 12, 2025

エモくない内容(フィルタリングやエラー処理をしないもの)でよければささっと書いちゃうか、と思って

ちょっと書いてみたんですが、

document.placedItems.add(svgファイル) だとドキュメント上に実体が出てきませんね…

1つずつ開いてコピペ、をループでやる形しかないのかな。

var doc = app.activeDocument;
var svgs = File.openDialog("svgファイルを選択しなければ", true, true);

for(var i = 0; i < svgs.length; i++){
    var newLayer = doc.layers.add();
    doc.activeLayer = newLayer;
    app.open(svgs[i]);
    app.executeMenuCommand("unlockAll");
    app.executeMenuCommand("selectall");
    app.executeMenuCommand("copy");
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    app.executeMenuCommand("paste");
    app.executeMenuCommand("deselectall");
}

 

既存の開かれたドキュメントがある状態で実行、

ファイル選択ダイアログが出るので複数のファイルを選択(フィルタリングしていません)

ループ{

 レイヤーを1つ追加してアクティブに

 選択された i  個めのファイルを開く、すべてを選択、コピー、保存せず閉じる

 (元のドキュメント上に)ペースト、選択を解除

 

という内容です。既存ドキュメントありきなので新規ドキュメントの場合は最初からある「レイヤー 1」が出番なしとなります。

 

こまかい要望があれば追記してみてください。

k_oshiro
Community Expert
k_oshiroCommunity ExpertAuthor
Community Expert
March 12, 2025

ajabon grinsmithさん
ご返信ありがとうございます。
スクリプトもお書きいただきありがとうございます。現状,
スクリプトでも難しい旨わかりました。
スクリプト初心者ゆえくわしいプログラム内容はわかりませんが、コピペの動作を自動化してくれるスクリプトのようですね。
スクリプトの拡張子を.jsxにしてイラレに読み込んだのですが、私の環境では構文エラーが出てしまいました。
なにか原因があるのでしょうか?
スクリプト初心者ゆえご教授いただけますと幸いです。

 

k_oshiro(AdobeCommunityExpert)
ajabon grinsmith
Community Expert
Community Expert
March 12, 2025

あっ、動画のほうでわかりました。

エディタにルーラー(定規)がついていることから、現状リッチテキストフォーマットになっているようです。

テキストエディット.app メニュー「フォーマット」から「標準テキストにする」してからペースト&保存してみてください。

標準テキストはプレーンテキストとも呼ばれ、スクリプトファイルはこちらで保存しないと動きませんです。