色々な方のスクリプトを参考に
イラレ上で選択しているテキストと同じファイル名の画像を
配置するスクリプトを作りました。
一つのテキストを選択している時は動作するのですが、
複数テキスト選択時に思ったように動作しません。
下記のt_contentsが複数の場合、それに連動して複数の画像を配置したいのですがどうすれば良いでしょうか?
frames = app.activeDocument.selection;
for(i=0; i < frames.length; i++){
t_contents = frames[i].textRange.contents+".psd";
// alert(t_contents);
base_X = -700;
base_Y = 0;
startX = 0;
startY = 0;
Y = 100; //
maxCountX = 7; /
maxCountY = 11;
boxHeight = 15;
x = startX;
y = startY;
docObj = app.activeDocument;
foldername = Folder.selectDialog("フォルダを指定してください");
if (foldername)
{
var text = [t_contents];
for (var j=0; j<text.length; j++)
{
fileList = foldername.getFiles(text[j]);
layoutImage(fileList);
}
}
function layoutImage(fileList)
{
for (i=0; i<fileList.length; i++)
{
pItem = docObj.placedItems.add();
fs = new File(fileList[i].fsName);
pItem.file = fs;
pItem.width = w;
pItem.height = h;
//pItem.embed();
pItem.position = new Array(base_X + x,base_Y - y);
x = x + w;
}
///////////////////////////////////
function setOriginalSizeH(){
var selObj = activeDocument.selection;
for (var i=0; i<selObj.length; i++){
if (selObj[i].file){
var filename = selObj[i].file;
var docObj = documents.add();
var pItem = docObj.placedItems.add();
pItem.file = filename;
var srcW = pItem.width;
var srcH = pItem.height;
docObj.close(SaveOptions.DONOTSAVECHANGES);
var h = selObj[i].height;
var aspect = h / srcH;
selObj[i].width = srcW * aspect;
}
}
}
setOriginalSizeH();
///////////////////////////////////
}
[19266] take (2017/06/22 Thu 19:57)
とりあえずちゃんと動作する状態の物をアップしてみてください。
[19267] -e (2017/06/23 Fri 13:17)
> とりあえずちゃんと動作する状態の物をアップしてみてください。
失礼しました。
下記でいかがでしょうか?
マシンを再起動しての動作確認もしました。
frames = app.activeDocument.selection;
for(i=0; i < frames.length; i++){
t_contents = frames[i].textRange.contents+".psd";
// alert(t_contents);
}
base_X = -700;
base_Y = 0;
startX = 0;
startY = 0;
w = 100; //
h = 100; //
maxCountX = 7;
maxCountY = 11;
boxHeight = 15;
x = startX;
y = startY;
cntX = 0;
cntY = 0;
var docObj = app.activeDocument;
foldername = Folder.selectDialog("フォルダを指定してください");
if (foldername)
{
var text = [t_contents];
for (var j=0; j<text.length; j++)
{
fileList = foldername.getFiles(text[j]);
layoutImage(fileList);
}
}
function layoutImage(fileList)
{
for (i=0; i<fileList.length; i++)
{
pItem = docObj.placedItems.add();
fs = new File(fileList[i].fsName);
pItem.file = fs;
pItem.width = w;
pItem.height = h;
//pItem.embed();
pItem.position = new Array(base_X + x,base_Y - y);
x = x + w;
cntX++;
if (cntX >= maxCountX)
{
cntX = 0;
x = startX;
y = y + h + boxHeight;
cntY++;
if (cntY >= maxCountY)
{
cntY = 0;
y = startY;
}
}
}
///////////////////////////////////
function setOriginalSizeH(){
var selObj = activeDocument.selection;
for (var i=0; i<selObj.length; i++){
if (selObj[i].file){
var filename = selObj[i].file;
var docObj = documents.add();
var pItem = docObj.placedItems.add();
pItem.file = filename;
var srcW = pItem.width;
var srcH = pItem.height;
docObj.close(SaveOptions.DONOTSAVECHANGES);
var h = selObj[i].height;
var aspect = h / srcH;
selObj[i].width = srcW * aspect;
}
}
}
setOriginalSizeH();
///////////////////////////////////
}
[19268] take (2017/06/23 Fri 14:59)
色々とツッコミどころはありますが、とりあえずこれで動くと思います。(順番の入れ替えとfor変数名の変更のみです)
frames = app.activeDocument.selection;
var docObj = app.activeDocument;
foldername = Folder.selectDialog("フォルダを指定してください");
for(var f=0; f < frames.length; f++){
t_contents = frames[f].textRange.contents+".psd";
base_X = -700;
base_Y = 0;
startX = 0;
startY = 0;
w = 100; //
h = 100; //
maxCountX = 7;
maxCountY = 11;
boxHeight = 15;
x = startX;
y = startY;
cntX = 0;
cntY = 0;
if (foldername)
{
var text = [t_contents];
for (var j=0; j<text.length; j++)
{
fileList = foldername.getFiles(text[j]);
layoutImage(fileList);
}
}}
function layoutImage(fileList)
{
for (var i=0; i<fileList.length; i++)
{
pItem = docObj.placedItems.add();
fs = new File(fileList[i].fsName);
pItem.file = fs;
pItem.width = w;
pItem.height = h;
//pItem.embed();
pItem.position = new Array(base_X + x,base_Y - y);
x = x + w;
cntX++;
if (cntX >= maxCountX)
{
cntX = 0;
x = startX;
y = y + h + boxHeight;
cntY++;
if (cntY >= maxCountY)
{
cntY = 0;
y = startY;
}
}
}
///////////////////////////////////
function setOriginalSizeH(){
var selObj = activeDocument.selection;
for (var i=0; i<selObj.length; i++){
if (selObj[i].file){
var filename = selObj[i].file;
var docObj = documents.add();
var pItem = docObj.placedItems.add();
pItem.file = filename;
var srcW = pItem.width;
var srcH = pItem.height;
docObj.close(SaveOptions.DONOTSAVECHANGES);
var h = selObj[i].height;
var aspect = h / srcH;
selObj[i].width = srcW * aspect;
}
}
}
setOriginalSizeH();
///////////////////////////////////
}
[19269] -e (2017/06/23 Fri 16:33)
ありがとうございます!もっとスマートになるようがんばります。
[19272] take (2017/06/26 Mon 13:41)
だいぶスマートになった気がするので
需要はないかもしれませんが晒します。
frames = activeDocument.selection;
var docObj = activeDocument;
foldername = Folder.selectDialog("フォルダを指定してください");
for(var f=0; f < frames.length; f++){
t_contents = frames[f].textRange.contents+".psd";
//alert(t_contents);
var encoded = t_contents.toSource();
var TT =encoded
//濁点
.replace(/u30AC/g, "u30AB\u3099")//ガ
.replace(/u30AE/g, "u30AD\u3099")//ギ
.replace(/u30B0/g, "u30AF\u3099")//グ
.replace(/u30B2/g, "u30B1\u3099")//ゲ
.replace(/u30B4/g, "u30B3\u3099")//ゴ
.replace(/u30B6/g, "u30B5\u3099")//ザ
.replace(/u30B8/g, "u30B7\u3099")//ジ
.replace(/u30BA/g, "u30B9\u3099")//ズ
.replace(/u30BC/g, "u30BB\u3099")//ゼ
.replace(/u30BE/g, "u30BD\u3099")//ゾ
.replace(/u30C0/g, "u30BF\u3099")//ダ
.replace(/u30C2/g, "u30C1\u3099")//ヂ
.replace(/u30C5/g, "u30C4\u3099")//ヅ
.replace(/u30C7/g, "u30C6\u3099")//デ
.replace(/u30C9/g, "u30C8\u3099")//ド
.replace(/u30D0/g, "u30CF\u3099")//バ
.replace(/u30D3/g, "u30D2\u3099")//ビ
.replace(/u30D6/g, "u30D5\u3099")//ブ
.replace(/u30D9/g, "u30D8\u3099")//ベ
.replace(/u30DC/g, "u30DB\u3099")//ボ
//半濁点
.replace(/u30D1/g, "u30CF\u309A")//パ
.replace(/u30D4/g, "u30D2\u309A")//ピ
.replace(/u30D7/g, "u30D5\u309A")//プ
.replace(/u30DA/g, "u30D8\u309A")//ペ
.replace(/u30DD/g, "u30DB\u309A");//ポ
var decoded = TT.replace(/(\\u)([0-9A-F]{4})/g, function(match,p1,p2){
return String.fromCharCode(parseInt(p2, 16));
});
var TT1 =decoded
.replace(/\(new String\(\"/g, "")
.replace(/\"\)\)/g, "");
if (foldername)
{
var text = [TT1];
for (var j=0; j<text.length; j++)
{
fileList = foldername.getFiles(text[j]);
layoutImage(fileList);
}
}}
function layoutImage(fileList)
{
for (var i=0; i<fileList.length; i++)
{
imObj = new File(fileList[i].fsName);
pItem = docObj.placedItems.add();
pItem.file = imObj;
imHi = pItem.height;
imWh = pItem.width;
pItem.height = imHi*0.1;
pItem.width = imWh*0.1;
}
}
Unicodeの処理が原始的ですが・・・
[19273] take (2017/06/28 Wed 16:26)
シンプルに...
選択したポイントテキストをファイル名とみなしてファイル(PSD形式)をポイントテキストの座標に指定幅(ww)で貼りこむスクリプト。
テキスト上では拡張子なし。
//---------------------
var docObj = app.activeDocument;
var objs=docObj.selection;
//配置オブジェクトの幅を指定。ポイント単位前提。この場合なら10mmの設定。
var ww=10/0.352778;
if(objs[0]!=null){
//画像の入っているフォルダを指定
var folder_name=Folder.selectDialog("フォルダを指定してください");
var xfolder=new File(folder_name);
//フォルダのパスを取得
var folder_path=xfolder.fsName;
for(var n=0;n<objs.length;n++){
//選択したオブジェクトのうち、ポイントテキストのみ対応
if(objs[n].kind==TextType.POINTTEXT){
var ob=objs[n].contents;
var b_box=objs[n].visibleBounds;
var f_name=new File(folder_path+"/"+ob+".psd");
var xx=b_box[1];
var yy=b_box[0];
Place_Object(docObj,f_name,xx,yy,ww,0);
}
}
}
else{
alert("テキストが選択されていません");
}
//ファイルf_nameを、(xx,yy)の座標にwwの幅で貼り込む。
//xhhが0以下の時、高さをwwに合せて変倍する。
//xhhがそれ以外のときは指定された値にする(→結果として、天地と左右で倍率が異なる可能性が高い)
function Place_Object(docObj,f_name,xx,yy,ww,xhh){
if(f_name.exists){
var im=docObj.placedItems.add() ;
im.file=f_name;
if(xhh<=0){
var w=im.width;
var h=im.height;
var scale=ww/w;
var hh=h*scale;
}
else{
var hh=xhh;
}
im.width=ww;
im.height=hh;
im.position=[yy,xx];
}
}
[19274] . (2017/06/29 Thu 11:34)