kyosuke12345
Explorer
kyosuke12345
Explorer
Activity
Feb 02, 2025
10:08 PM
誤解を招く表記をしており申し訳ございませんでした。 [重なっているオブジェクトを全選択→一番上のオブジェクトをグループ選択ツールでマウスクリック→キーボードのdeleteキー]で後ろのオブジェクトだけを消せる。 という特に捻りもない手作業を思い浮かべて回答させていただいていました。 スクリプトを使うのであれば、 if (app.documents.length > 0) {
var doc = app.activeDocument;
if (doc.selection.length > 1) {
var selectedItems = [];
for (var i = 0; i < doc.selection.length; i++) {
selectedItems.push(doc.selection[i]);
}
var topItem = selectedItems[0];
for (var i = 1; i < selectedItems.length; i++) {
//最背面でzOrderPositionが無いオブジェクトは例外処理で避ける
try {
if (selectedItems[i].zOrderPosition > topItem.zOrderPosition) {
topItem = selectedItems[i];
}
} catch (e) {
}
}
for (var i = 0; i < selectedItems.length; i++) {
if (selectedItems[i] !== topItem) {
selectedItems[i].remove();
}
}
}
} といったところでしょうか。 ※上記スクリプトは【レイヤーを跨いだ重なりは比較しておらず、同一レイヤー内の重なりの比較で最前面を検出して最前面以外を削除】なのでご注意ください。 スクリプトをキーボードショートカット等に登録すれば、一手減らせるとは思いますが凄い解決方法を思いついているわけではなく申し訳ないです。
... View more
Jan 30, 2025
07:07 PM
有料プラグインになりますが、地理情報開発社製のPlugX-Search+という製品のObjectSearch+の機能でアピアランスの差異も検出する同一オブジェクトの一括選択ができます。 https://www.adobe.com/jp/information/creativecloud/illustrator-plugin.html#kensaku adobeのページでも紹介があります(リンクが切れてますが…) (オブジェクト数:数十万以上)ということで手作業は現実的では無いかもしれませんが、重なったものを全選択して一番前面のもの以外削除くらいはできるので、地道に片付けるのであればこういったものも検討していただけるかもしれませんね。
... View more
Sep 12, 2024
07:51 PM
2 Upvotes
イラストレーター2018以降であればスクリーン用書き出し相当のexportForScreensが使えます。 scaleTypeにSCALEBYRESOLUTIONを設定して、scaleTypeValueで解像度を設定できます。 以下、開いているドキュメントをデスクトップに作成したフォルダにPNGで書き出すサンプルです。 uname = $.getenv('USER');
//書き出しフォルダ名
soutfname = "PNG"
var hiduke=new Date();
var year = hiduke.getFullYear();
var month = ("000" + (hiduke.getMonth()+1)).substr(-2);
var day = ("000" + hiduke.getDate()).substr(-2);
sfolderpass = "/Users/" + uname + "/Desktop/"+ year + month + day + "_" + soutfname;
outfolder = new Folder(sfolderpass);
outfolder.create()
mydocument = app.activeDocument;
exportOptions = new ExportForScreensOptionsPNG24();
exportOptions.antiAliasing = AntiAliasingMethod.TYPEOPTIMIZED
exportOptions.artBoardClipping = false;
exportOptions.transparency = false;
exportOptions.scaleType = ExportForScreensScaleType.SCALEBYRESOLUTION
exportOptions.scaleTypeValue = 300
Export = new ExportForScreensItemToExport();
mydocument.exportForScreens(outfolder, ExportForScreensType.SE_PNG24, exportOptions,Export);
... View more
May 27, 2024
10:21 PM
I'm sorry. I was warned so I erased this reply.
... View more
May 19, 2024
06:42 PM
1 Upvote
一番下の var doc = app.activeDocument; fitToAllObject(doc); を、 for(var d=0; d<documents.length; d++){
app.activeDocument = documents[d]
var doc = app.activeDocument;
fitToAllObject(doc);
}; といったところでしょうか。
... View more
May 07, 2024
01:34 AM
強制ガベージコレクトがあったのですね。 今まで気が付きませんでした。 AdobeにExtendされた部分がメモリ解放されていないような感覚があったので、毎度オブジェクトごとにnullを当てたりはしていました。 すぐに試せる準備が無いのですが、近々検証させていただきたいと思います。 有益な情報ありがとうございます。
... View more
May 07, 2024
12:52 AM
XMPにはフォント情報以外にも必要な情報がありますので、やはり上書き保存が良さそうですね。 夜中にループ処理で置き換え続けるということもやっていたりするのですが、保存がネックとなるので他の方法を探っていました。 数百件くらいからメモリの関係だと思われるのですが、速度が著しく落ちるので困ったもんです。 (使い続けていると遅くなるイラレの仕様だと認識しています) ありがとうございました。
... View more
May 06, 2024
08:32 PM
ご返信ありがとうございます。 メタデータとしての整合性を保ってもらいたいところですが、やはり仕様なのでしょうね。 保存し直しがベターだとおっしゃっていただきありがとうございます。 該当データが数万件くらいはありそうですが保存し直しで検討してみます。 (Ten A様のXMPライブラリ書き換えの記事も拝見させていただいておりました) 大変参考になりました、ありがとうございます。
... View more
May 06, 2024
07:05 PM
お世話になっております。 イラストレーター保存時のオプション[各アートボードを個別のファイルに保存] (スクリプトではIllustratorSaveOptionsのsaveMultipleArtboards) ですが個別に書き出されたファイルのXMPが書き出し前の元データの情報をそのまま引き継ぎ、書き出し先の情報に上書きされないというのは仕様でしょうか? 使われていないフォント情報がXMPに入っているドキュメントを多々発見して、この個別のファイルに保存の際にXMPが書き換えられていないことが原因だと発覚しました。 こちらの環境はMacOSでイラレのバージョンは2023以前のものです(申し訳ございませんが2023の27.2以降のバージョンではテストできていません)。 対応策も個別に書き出されたものを全て上書き保存し直すくらいかと思われますが、何か良い方法ご存知でしたらご教示いただけないでしょうか。 よろしくお願いします。
... View more
Dec 28, 2023
09:47 PM
2 Upvotes
ajabon grinsmithさんのお知り合いということで出典が分かりましたね。 しばらく更新されていないようなのでこちらで少し書き換えて動作確認してみた分も置いておきます。 これでいかがでしょうか。 main();
function main(){
//スウォッチ設定ここから
//変更前名称、変更後名称、変更後カラーを,(カンマ)の位置でそれぞれ合わせる
var aBeforName = ["スミアミ","アカ","アオ"]
var aAeforName = ["K20","M100","C100"]
var aCngColor = [chg_col(0,0,0,20),chg_col(0,100,0,0),chg_col(100,0,0,0)]
//スウォッチ設定ここまで
if(documents.length ==0){
return;
};
var ilen = aBeforName.length
var my_sw = app.activeDocument.swatches
var iswlen = my_sw.length
for (var i=0; i<ilen; i++) {
for (var j=0; j<iswlen; j++) {
var sw = my_sw[j]
if (sw.name == aBeforName[i]) {
sw.name = aAeforName[i];
sw.color.spot.color = aCngColor[i];
}
}
}
}
function chg_col(c,m,y,k) {
var my_col = new CMYKColor();
my_col.cyan = c;
my_col.magenta = m;
my_col.yellow = y;
my_col.black = k;
return my_col;
}
... View more
Dec 28, 2023
04:37 PM
コードの記載ミスですね。 my_sw[K20] my_sw[M100] my_sw[C100] ともに[]の中は[i]です。
... View more
Nov 27, 2023
06:21 PM
Call the script and select the folder containing the PDF. Delete the object based on its location. If this does not seem to work, try changing the value of [Parameters] in the script. How does it work? //Parameters
iheader_px = 80
ifooter_px = 80
iheader_margin = 20
ifooter_margin = 20
//
sFileType = "pdf"
main();
function main(){
coordinateSystemOrg = app.coordinateSystem;
try{
app.coordinateSystem = CoordinateSystem.ARTBOARDCOORDINATESYSTEM;
folderRef = Folder.selectDialog("Select Folder");
if( folderRef != false){
fileList = folderRef.getFiles("*." + sFileType)
if( fileList != false){
ifl = fileList.length
for (var i=0;i<ifl;i++){
fileObj = new File(fileList[i].fsName);
app.userInteractionLevel=UserInteractionLevel.DONTDISPLAYALERTS;
open(fileObj);
app.userInteractionLevel=UserInteractionLevel.DISPLAYALERTS;
oDoc = app.activeDocument;
iwidth = oDoc.artboards[0].artboardRect[2]-oDoc.artboards[0].artboardRect[0]
iheight = oDoc.artboards[0].artboardRect[3]-oDoc.artboards[0].artboardRect[1]
hx1 = 0;
hy1 = 0;
hx2 = iwidth;
hy2 = iheader_px + iheader_margin;
fx1 = 0
fy1 = -(iheight + ifooter_px + ifooter_margin);
fx2 = iwidth;
fy2 = -iheight;
opg = oDoc.pageItems
ipg = opg.length
for( j=ipg-1;j>-1;j--){
if(checkinout(opg[j])){
try{
opg[j].remove()
}catch(e){;
};
};
};
oDoc.close(SaveOptions.SAVECHANGES);
oDoc = null
};
};
};
app.coordinateSystem = coordinateSystemOrg;
}catch(e){;
app.coordinateSystem = coordinateSystemOrg;
};
}
function checkinout(obj){
if (obj.geometricBounds){
var x1 = obj.geometricBounds[0];
var y1 = -obj.geometricBounds[1];
var x2 = obj.geometricBounds[2];
var y2 = -obj.geometricBounds[3];
if (x1 > hx1 && x2 < hx2 && y1 > hy1 && y2 < hy2)
return true
else{
if (x1 > fx1 && x2 < fx2 && y1 > fy1 && y2 < fy2)
return true
else{
return false
}
}
}
}
... View more
Nov 27, 2023
01:06 AM
If you want to place it in the centre, this is the place to do it. However, it is not a very beautiful method as it creates a dummy object. (The dummy object is erased, so there is no problem with the finished product.) ↓script var doc = app.activeDocument; app.executeMenuCommand("deselectall"); for (var i = 0; i < doc.textFrames.length; i++) { var oText = doc.textFrames[i]; var nearestpathItems; var nearestDistance = Number.MAX_VALUE; for (var j = 0; j < doc.pathItems.length; j++) { var oPath = doc.pathItems[j]; var d = dist([oText.position[0] + oText.width / 2, oText.position[1] - oText.height / 2], oPath.geometricBounds); if (d < nearestDistance) { nearestDistance = d; nearestpathItems = oPath; } } odummy = oText.duplicate() odummy = odummy.createOutline() iHeight = odummy.height odummy.remove() ipos1 = nearestpathItems.left + (nearestpathItems.width - oText.width) / 2 ipos2 = nearestpathItems.top - (nearestpathItems.height - iHeight) / 2 oText.position = [ipos1, ipos2]; oText.selected = true } function dist(point1, rect) { var x1 = point1[0], y1 = point1[1]; var x2 = rect[0] + (rect[2] - rect[0]) / 2, y2 = rect[1] - (rect[1] - rect[3]) / 2; return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); }
... View more
Nov 27, 2023
12:49 AM
Adjust the position of the placed text around the centre of the nearest path. How about we make the text selected, so that you can adjust the appearance of the text yourself for any discrepancies caused by fonts? ↓script var doc = app.activeDocument; app.executeMenuCommand("deselectall"); for (var i = 0; i < doc.textFrames.length; i++) { var oText = doc.textFrames[i]; var nearestpathItems; var nearestDistance = Number.MAX_VALUE; for (var j = 0; j < doc.pathItems.length; j++) { var oPath = doc.pathItems[j]; var d = dist([oText.position[0] + oText.width / 2, oText.position[1] - oText.height / 2], oPath.geometricBounds); if (d < nearestDistance) { nearestDistance = d; nearestpathItems = oPath; } } ipos1 = nearestpathItems.left + (nearestpathItems.width - oText.width) / 2 ipos2 = nearestpathItems.top - (nearestpathItems.height - oText.height) / 2 oText.position = [ipos1, ipos2]; oText.selected = true } function dist(point1, rect) { var x1 = point1[0], y1 = point1[1]; var x2 = rect[0] + (rect[2] - rect[0]) / 2, y2 = rect[1] - (rect[1] - rect[3]) / 2; return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); }
... View more
Nov 26, 2023
10:47 PM
Select the folder containing the eps Create a csv on the same level ↓script ----- //Header sNo = "S.No" sName = "Name" sWpt = "Active artboard width in points" sHpt = "Active artboard height in points" // sFileType = "eps" main(); function main(){ folderRef = Folder.selectDialog("Select Folder"); if( folderRef != false){ fileList = folderRef.getFiles("*." + sFileType) if( fileList != false){ fileList.sort(compare) sText = sNo + "," + sName + "," + sWpt + "," + sHpt ifl = fileList.length for (var i=0;i<ifl;i++){ sText += "\r" fileObj = new File(fileList[i].fsName); app.userInteractionLevel=UserInteractionLevel.DONTDISPLAYALERTS; open(fileObj); app.userInteractionLevel=UserInteractionLevel.DISPLAYALERTS; oDoc = app.activeDocument; sText += i+1 sText += "," + decodeURI(oDoc.name.replace(("." + sFileType),"")) sText += "," + (oDoc.artboards[0].artboardRect[2]-oDoc.artboards[0].artboardRect[0]) + " pt" sText += "," + -(oDoc.artboards[0].artboardRect[3]-oDoc.artboards[0].artboardRect[1]) + " pt" oDoc.close(SaveOptions.DONOTSAVECHANGES); oDoc = null }; var oFile = new File(folderRef.path + "/" + "Output.csv") ; oFile.open ("w","",""); oFile.encoding = "UTF-8" oFile.writeln(sText); }; }; } function compare(a,b){ regex = new RegExp(/[0-9]+/); index = 0 a_num = parseInt(a.name.match(regex)) b_num = parseInt(b.name.match(regex)) if (a_num > b_num) { index = 1 }else if (a_num < b_num) { index = -1 } return index }
... View more