イラストレーターに貼り付けた画像をフォトショップで適した解像度に修正してくれるスクリプトなのですが、どなたかこのスクリプトをどうにか
Photoshopの画像解像度の「スタイルを拡大・縮小」と「縦横比固定」と「画像の再サンプル」すべてにチェックを入れた状態で起動するようにアレンジしていただけないでしょうか?
(現状だとスタイルを拡大・縮小にチェックが入っていないようで画像に
レイヤー効果が使用されていると不具合が生じます。)
(illustratorでリンク画像を選択→ExtendScript Toolkitでスクリプト起動→Photoshopで画像変換)
なおこのスクリプトのソース元は ttp://d.hatena.ne.jp/kamiseto/20090610/1244628779 です。
#include 'c.js';//http://svn.coderepos.org//share/platform/illustr …
#include 'matrixConvert.jsx';//http://d.hatena.ne.jp/kamiseto/20090502/1241251512
#target 'illustrator';
(function(){
var default_reso = 350;
var reso = prompt ('解像度(pixel/inch)とを数字で入力してください。不正な文字が入力された場合はデフォルトの350pixel/inchで計算します。', 350, '解像度(pixel/inch)となる数字を入力して下さい。')*1;
if(reso == 0 || typeof reso !== 'number')reso = default_reso;
//Photoshop Resize Image Function
function ResizeImage(file,hs,vs,reso){
open(File(file));
var myDoc = app.activeDocument;
var hasClippingPath = (function(){
for(i=0;i<app.activeDocument.pathItems.length;i++)if(app.activeDocument.pathItems[i].kind == PathKind.CLIPPINGPATH)return true;
return false;
})();
var isPSD = (function(){
var f = new File(app.activeDocument.fullName);
f.open('r');
var h = (f.read('4'));
f.close();
return h == '8BPS' ? true : false;
})();
if(isPSD && hasClippingPath){
hs = hs*(myDoc.resolution/72);
vs = vs*(myDoc.resolution/72);
}
myDoc.resizeImage (UnitValue((myDoc .width.as('pixel'))*hs*reso/myDoc.resolution,'pixel'), UnitValue((myDoc .height.as('pixel'))*vs*reso/myDoc.resolution,'pixel'),reso, ResampleMethod.BICUBICSHARPER);
}
//
function FinalImageSize(ImgObj){
var info = getPlacedItemInfo(ImgObj);
if(info['type'] == 'PDF')return;
if(info['type'] == 'EPSF' && info['creator'].match(/Photoshop/) != 'Photoshop')return false;
var mat = matrixConvert.getAll(ImgObj);
//
if(0.7 < ((mat.hs*mat.vs)/10000) && ((mat.hs*mat.vs)/10000) < 1.3)return;
try{
var bt=new BridgeTalk();
bt.target = 'photoshop';
bt.body = uneval (ResizeImage)+"('"+ImgObj.file+"',"+mat.hs/100+","+mat.vs/100+","+reso+");";
bt.onError = function (btObj) {alert( btObj.body + " (" + btObj.headers ["Error-Code"] + ")" ); };
bt.send();
}catch(e){
throw(e);
}
}
function getPlacedItemInfo(pi){
if(pi.file.exists){
var info = {
'type' :'',
'creator' : '',
'color' : ''
};
var f = new File(pi.file);
var g = "";
var header = "";
f.open('r');
switch(g = f.read(4)){
case '8BPS' :
f.seek(0,0);
/*
while(header = f.readln()){
if(header)tmph = header;
};
f.seek((-1*tmph.length)-8,1);
*/
info['type'] = 'PSD';
break;
case '%!PS' :
f.seek(0,0);
var header = (f.read(1000));
info['type'] = 'EPSF';
//Creator
if(creator = header.match (/%%Creator:(.+)/))info['creator'] = creator[1];
//Duotobe
if(duotone = header.match(/%%DocumentCustomColors: \((.+)\)/))info['color'] =duotone[1];
//CMYK or GrayScales
if(colors = header.match (/%%DocumentProcessColors:\s(.+)/))info['color'] = colors[1];
break;
case '%PDF' :
info['type'] = 'PDF';
//break;
default :
/*
f.seek(0,0);
//$.writeln(g);
while(header = f.readln()){$.writeln(header);}
*/
break;
}
f.close();
}
return info;
}
c("S").filter("placedItems").each(FinalImageSize);
//FinalImageSize(app.activeDocument.placedItems[0]);
})();
No.2ベストアンサー
- 回答日時:
WinXP、CS2で動作確認しました。
全部書くと長くなってしまいますので部分的に書きますね。
function ResizeImage(file,hs,vs,reso){
open(File(file));
(~16行省略~)
......ResampleMethod.BICUBICSHARPER);
}
↑この関数を
↓このように置き換えて実行してみてください。
function ResizeImage(file,hs,vs,reso){
open(File(file));
var desc = new ActionDescriptor();
desc.putUnitDouble( charIDToTypeID( 'Rslt' ), charIDToTypeID( '#Rsl' ), reso );
desc.putBoolean( stringIDToTypeID( 'scaleStyles' ), true );
desc.putBoolean( charIDToTypeID( 'CnsP' ), true );
desc.putEnumerated( charIDToTypeID( 'Intr' ), charIDToTypeID( 'Intp' ), stringIDToTypeID( 'bicubicSharper' ) );
executeAction( charIDToTypeID( 'ImgS' ), desc, DialogModes.NO );
}
No.1
- 回答日時:
PhotoshopCS4のJavascriptリファレンス見ました。
結論を言うと無理そうです。
このスクリプトで使用しているresizeImageメゾット(画像大きさ変更するところ)に、そのようなオプションができるようになっていませんでした。
他の設定なども見てみましたが該当箇所はなさそうです。
ひとつ試していただきたいのは、
何らかのテスト画像を開いて、一度、全てチェックを付けた状態で画像解像度変更を実行し、その後にスクリプトを実行してもダメでしょうか?
早速の回答ありがとうございます。
テスト画像で、すべてチェックを付けた状態で試しても結果は同じでした。
やはりレイヤー効果を使用してるpsd画像を縮小したりすると効果部分がおかしくなってしまいます。
一度レイヤーを統合してしまえば問題なく使用できるのですが、可能であればレイヤーを活かしたまま使用したいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptで文字列の特定文字...
-
翌月を取得するGASが分かりません
-
C#OpenCv V4にのエラーに関する...
-
var exports = exports || {}; ...
-
GAS アンケート回答後の自動返...
-
アルファベットABCD…をスマート...
-
setTimeoutによる繰り返しが途...
-
google apps scriptの終了のさせ方
-
google map apiで下記のhtmlが...
-
googleスプレッドシートのApps ...
-
今日からnヶ月後(前)
-
ボタンを押すことでテキストエ...
-
引数なしの関数で疑問です
-
javascriptで複数キーワード検...
-
GASでGoogleフォームの自動返信...
-
なぜmatchメソッドがエラーにな...
-
ASP.NETのコントロールの値をJa...
-
javascript修正依頼
-
第3日曜日のみの日付を取得、...
-
Javascriptで指定した位置の文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
メールフォームの日付入力フォ...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
GASでGoogleフォームの自動返信...
-
なぜmatchメソッドがエラーにな...
-
翌月を取得するGASが分かりません
-
ローカルにあるファイルを検索...
-
HTMLで作った時報アプリが動き...
-
ASP.NETのコントロールの値をJa...
-
C# 演算 奇数と偶数 表現の仕方
-
html javascript リンク先アド...
-
gas スプレッドシートがアクテ...
-
javascriptでテーブルに追加し...
-
VSCODE[Python]の設定について
-
JavaScriptで決まった「時刻」...
-
ASP.NET MVCでObjectをjsに渡す
-
イベントが初めの一回しか起き...
-
jqGridについて
おすすめ情報