titol
Home Wordpress            

 

  電子国土WebNEXTの利用  
  1

電子国土WebNEXTを利用する方法で、提供されているまま利用する方法も有るが、この地図のタイル地図を取得し、再合成による巨大詳細地図を使う方法を紹介します。

其の方法を述べて行きますが、電子国土ポータルのホームページに何が有るか覚えておいてください。。

 

1は電子国土WebNEXTの試験公開のページ

2は電子国土Webの在来版のページ

3はバージョン情報

4はサイトマップ

5はサイト構築サンプル集

     
 

上記4のバージョン情報をクリックすると、いろんな情報が有りますが、左図赤丸Version4をクリックしてください。

     
 

Ver4のVer.3からの変更点は、「背景地図タイルの仕様が変更されること」のほぼ1点に集約されます。

     
 

Ver3のタイルの場合横は300ピクセルで一定しているようですが。縦は場所により300〜500以上の場合が有ります。

     
 

Ver4は縦横ともに256ピクセルです。

 

     
 

では、電子国土WebNEXTはこの256×256のタイル画像をどのようにWebに投射して、ユーザーが見れるようにしているのか。

 

     
 

例としてこのタイル画像が、何処に保管されているか、左図の中の URL にアクセスしてください。 つくば学園都市の「つくば駅」を含むタイル画像が見れましたか。

 

 

     
 

URLの中程

「DJBMM」はタイルを保管してあるディレクトリーの名前です。

主に良く使う地図は、レベル15,16,17の [DJBMM]でしょう。今後はこれを中心に述べて行きますが、他の種類も同じSystemで動いています。

閲覧しているときに、ズームアップやズームダウンすると、自動的に、地図の種類が切り替わっているのです。

切り替わることに寄る利点と、欠点が有ります。

ここで今紹介しようとしている方法は、地図が切り替わらない方法であり、此れには切り替わらない、利点と欠点が有ります。

     
 

URLの一番後ろの.pngは画像ファイルのサヒックスです。jpg画像では有りません。

 

   

 

 

先ほどアクセスしたURL中程の/16/00/00/52/85/27/71

はタイル座標(ピクセル座標と相関する)によって決まる6階層のディレクトリーを示しています。

最初の/16はズームレベルを表すデイレクトリーです。

その下のディレクトリーの名前は、タイル画像のファイル名00582740025716.pngの

/1桁目+8桁目---->/00

/2桁目+9桁目---->/00

/3桁目+10桁目--->/52

/4桁目+11桁目--->/85

/5桁目+12桁目--->/27

/6桁目+13桁目--->/71

で名付けられている。

7桁目の0〜9、

14桁目の0〜9、

の変化したすべてのファイルは、同一ホルダーに100枚の画像として纏めて格納されています。

7桁目と14桁目以外の桁の変化はディレクトリーの変更になります。

本当に有るか7桁目もしくは14桁目の数字を変更してアクセスしてみてください。

     
 

このタイル画像をユーザーが見ることができるように、サーバー側でかき集め、並べて、ユーザー側に、必要な部分だけ送信します。

これで十分利用出来るのですがちょっと変わった方法ですがここで紹介しようとしている方法です。

その方法として、手作業でタイル画像を取得して、並べ直して、見ることもできます。しかし何万枚ダウンロードしても終わらないでしょう。

そこで、纏めてダウンロードする方法を考えました。

其のためには、ダウンロードしたい場所の地図のタイル画像が何処に有るのかを知る必要が有ります。

再掲の左図を見てください。

 

 

 
  • WGS84/GRS80楕円体の長半径(赤道半径)を半径とした
  • 真球をメルカトル図法に投影したものをタイル状に分割し
  • ています。
  • 西経180度、北緯85.05度付近を基準にし、タイル分割し
  • ています。
  • メルカトル投影をした北緯85.05度付近から南緯85.05
  • 度付近までの範囲を、256ピクセル×256ピクセルの
  • 1枚の画像で表現したものを「ズームレベル0」と定義し、
  • これが基準になります。
  • 1タイルのピクセルサイズは256ピクセル×256ピクセル
  • で固定します。
  • ズームレベルが1だけ大きくなると、1枚のタイルを縦横
  • 2分の1に分割します。つまり、「ズームレベル1」では
  • 2×2=4枚の画像で北緯85.05度付近から南緯85.05度
  • 付近までの範囲を地図で表現します。

左記は背景地図タイルの仕様でしたね。

ズームレベル16の地図のすべては

東西(2)^16=65536分轄

南北(2)^16=65536分轄

からできており、その格納方法は先ほど述べてきたディレクトリーによって仕分けられて格納されています。

この分轄されたタイル区画を縦65536番、横65536番の座標値で各タイル画像を確定出来ます。此れをタイル座標といいます。

     
 

このタイル位置が常に緯度と正比例的位置に有れば計算は何ら頭を悩ませる

必要はない。しかしこのタイルを上記座標上は原点から256刻みに

(レベル16では)65536×65536枚余り並べるのですが、真球楕円上に並べるのではなく、

メルカトル図に展開した上に重ねているので、

その相関関係が必要に成る。

(wpx,wpy)=

((L+π)/2π, (1/2-(1/4π) LN ((1+sin(radians(B)))/(1-sin(radians(B)))) )×256(2)^MZ)

wpx,wpy :タイル座標をピクセル変換した座標のピクセル座標値

B :真球楕円上の緯度(単位はラディアン)

L :真球楕円上の経度(単位はラディアン)

MZ : ズームレベル

LNはExcelのLog(e)記号

下記を参照しました。

WEB ブラウザ上での表示に適した配信地図データの作成技法とその応用

地理空間情報部 小清水寛・高桑紀之

http://www.gsi.go.jp/common/000076319.pdf

左記の数式

の詳しい導き方はhttp://www.gammasoft.jp

メルカトル図法を導く:グーグルマップのしくみを探る(4)

のページに有ります。

参考に

オープンGIS社のTNTmips

テクニカルガイドの中に

の解説が有ります。

 

 

     
 

最上段緯度の値は85.051128779807です。ピクセル座標値は0と言いたいのですが限りなく0に近い値です。

タイル座標値はピクセル座標値を256ピクセルで割った時の値を超えない最大の整数値です。

参考にピクセルビッチを作っておきました、一番上と一番下は特異点ですから、ここを除いて見てください。高緯度程1度当たりのピクセル数は大きく成っています。

此れがメルカトル図法の最大の特徴です。

メルカトルや投影という言葉から連想される「地球の中心に電球があって、そこから映し出される・・・」というイメージは止めましょう、実はこのイメージはメルカトル図法の式の導出を難しくしてしまいます。

と言って説明をしている人がいました。私も小学校で変な知識を植え付けられていて、疑問を解くのに50年も掛かってしまいました。

確かにメルカトル図法の上下は間延びしていますが。電球の影は無限大に近く成りますが、数式では10倍程度です。

     
 

上記で経度・緯度からタイル座標値が得られるので、ここから、1枚毎にダウンロードするなら、先ほどのURLの決まりに従って、アクセスしてください。

何万回もアクセスすることは不可能に近いでしょう。

ここで一番始めに述べたHomeのページの5サイト構築サンプル集をクリックしてください。ここの「目的別のサンプル」が左記のように有ります。

     
 

上から7番目「入力した座標値・ズームレベルに応じて移動表示する」の解説および実際のサンプルプログラムが有ります。

このソースコードをコピーして、Dreamweaver(ソフトは何でも良いからhtmlモードにして)のhtmlに「ペースト」してください。

 

地図を見るだけなら、このタイル画像を呼び出して、並べれば言い訳です。ソースコードの7行目あたりに画像表示エンジンとでも言うべきScript「webtis_v4.js」が有ります。javascriptのOpenLayerです。

 

     
 

左記はDreamweaverのhtmlを開いたもの、すべて消してから「ペースト」してください。

そして、このソースコードを少し変更してください。

     
 

立ち上げたとき、画面の中心を何処にするかを決めます。

表示する画面のズームレベルを決めます。

入力ダイアログの初期値に合わせ、経度134度55分00秒

緯度35度00分00秒とする方が間違いが少なくなる。

     
 

画面サイズの設定です。使っているディスプレイより小さい値にすると、すべてが収まりますが、1回でダウンロードするタイル画像数を1.000枚近くする時は左記の数値を入れてください。30段31列,東西10分南北8分毎(7424ピクセルは29枚分の数値ですが30枚ダウンロードできます。この数値は各自試して、設定してください。)

 

この2倍のサイズにすると、約3700枚が一度にダウンロード出来るでしょう。61段61列東西20分南北16分毎

画面サイズの設定は、タイル画像が256×256であること、および、左記のタイル座標と経度緯度の相関で、

画面を移動させてダウロードを数回するとき、画面のスクロールを手動で行わずに、経度緯度の整数値に近い値を入力して、タイル段数も整数に近く成るようなピクセル数を入れてください。1列1段は隙間防止として余分にダウンロードさせて下さい。

 

     
 

初期設定した場所

 

     
 

上記ソースプログラムをアレンジして、保存したものを「FierFox」で立ち上げてください。大きい画面に設定すると立ち上げが遅く成ります。

私のImac27で1分強でした。

立ち上がったら、何もせず直ぐにぺージを保存すると、初期設定値を中心として、東西南北に設定した画面ピクセル数を256で除した整数+1列、段のタイル画像が得られます。

画面を移動させると中心が移動するので、目的の場所に移動して、ダウンロードしてください。

 

 

     
 

ブラウザーは「Fierfox」を使用してください。「Fierfox」の保存で「別名でページ保存する」の「Web、完全」を用いるのがミソです。立ち上げ時点ですべてのタイルを画像を読み込むだけのメモリーが有れば10秒程度で保存できると思います。

 

 

     
 

保存で得られた「ホルダー」の中のファイル名を見て、先ほどのタイル座標値の計算通りであることを確かめてみてください。

 

Sampleの7番目 を用いてソースブログラムをアレンジすると画面移動やズームレベルの変更が確認しながらできます。

 

     
 

以上がタイル画像を取得する方法ですが、あくまでも1枚1枚のアクセスはサーバーに迷惑をかけるので、「国土地理院のサンプルプログラム」に従って、ブラウザーから取得してください。

以上が、電子国土WebNEXTのタイル画像のダウンロードの一番早いやり方です。今度は此れを繫ぐテクニックが必要となります。

繋げれば、後はこの長大マップを色々な使い方ができるでしょう。

繫ぐソフトでフリーウェアーを探しているのですが、なかなかぴったりのものが有りません。手動で1枚毎に追加して行くものは有りましたが・・・・・

 

 

 

     
 

色々、探索していますが、単純にタイル画像を並べるsoftて、ないものですね。単純すぎるが故にないのでしょう。

分轄結合「あ」と言うWindowのフリーウェアーがそれに近いのですが、結合するとき一括ドロップができないため手作業となり、到底何千枚はできません。

やむを得ないので、photoshipのScript を使う方法を考えます。

此れも、256×256のタイル画像を300枚程度しか一括で読み込んでくれません。

 

     
 

一度に300枚呼んでくれないので1枚ずつ読ませ、「レイヤーに取り込んだら直ぐ、タイルファイルは閉じる」方法で考えることとした。

当初、photoshopに下地のファイルを作らせる。そのときにウインドウ幅X,高さY,解像度D,を与える。

次に、タイルの枚数T,最初に読み込むファイル名称の14桁の数字をA+B,を与える。

電子国土以外のファイルにも応用するなら、ファイルサヒックスもpng以外のjpgも必要となる。

読み込むファイル名は14桁の数字の7桁目と14桁目のどちらかが1ずつ増えるだけです。難しいのはこの14個の数字を文字列として扱う必要が有るからです。数字として扱うと00が表現出来なく成ります。

 

この結合に必要なタイル座標値はm=X/W,n=Y/Hから一位に決まる。(w,hはともに256ですが、汎用性を持たせると変数として入力する)

各タイルファイルを読み込んで、下地ファイルにレイヤーとして取り込んだ画像は、ウインドウの中心(W/2,H/2)に取り込まれるので、其の都度移動させる必要が有る。其の移動量は、ファイルを読み込むカウントの相関から決まってくる。

 

さあJavascriptで書けるかな

書けました。

左図は思考途中で完成前のもの

     
 

取り敢えず連続20枚は読ませることができました・

タイル画像の移動量は、カウントtの関数となるように考えてあるが、この辺の関数の扱いを今から付加する。

 

もう一つこの移動量をjavascriptで書けるかな。

右はphotoshopに20枚連続読み込みをさせるjavascriptで読み込み、確認のため手作業で、画像ずらししたものです。

     
 

何とか書けました。

入力ダイアログが1つずつになっていますが、かっこ良くするには、1枚のダイアログに纏めると、かっこ良いのですが。

でも31×31枚が15分程度結合出来、保存で5分、

61×61枚テスト中

 

1枚目ファイル名と最後のファイル名を入れると、出来上がり縦横ピクセル、列段など自動的に決める方法もあるので、改善の余地があります。

まあ、取り敢えず、目的は達成されました。

どんな利用の仕方をするかは、考えてください。

     
 

61×61枚

結合155分、保存準備14分

保存8分、

Scriptの詳細な技量がないので、GUIから変数を入れて、ファイル読み込みを自動化する方法が巧く行っていません。

Scriptのの構文の中に変数を作製し、値を構文中で読ませて、ファイルの自動読み込みはできています。

よって枚数の可変な場合の対応ができていません。縦横の枚数が明快なら、位置からscriptを書き直して、柔軟に対応はできます。

   

 

 

61×61枚の結合より、31×31枚の結合4回の方が、時間的にも早く出来る。成果品4枚を結合しても、精度は保持出来ます。だからタイル画像をダウンロードするサンプルプログラムも、30枚×30枚程度の大きさに設定する方が良いでしょう。

そこでサンプルプログラムの設定を30×30枚をダウンロードすべく幅高さとも7,424ピクセルにすると横方向90列に1回くらい隙間ができるので1ピクセル増やしました。

この設定でタイル画像は東西31枚南北30枚がダウンロードできます。この設定とSampleプログラムの東西10分南北8分は完全では有りませんが、巧くマッチしています。

     
 

ダウンロードする中心の緯度経度は東経を10分,緯度を8分毎に設定しました。

 

     
 

左図がダウンロードしたファイルです。

南北方向1段目と2段目に、かつ4段目と5段目に、すなわち90段に1回の割合でタイル画像がダブります。よって結合は1列目で29段として読み込ませるか、2列目のホルダーの読み込ませを29段にする必要が有ります。4,5段目も同じです。

又、東西方向やはり90枚に1列程度が隙間となるので1列追加しましたので3列目と5列目のフオルダー内のタイル画像の列数が30枚ではなく31列になっています。

 

  タイル画像合成スクリプト Back
 

#target photoshop
var originalUnit = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;

var T=0;D=300;W=256;H=256;m=32;n=32;t=0;sf=".png";ph="photo";A="";B="";E="";F="";
var Tx=0;M=4;N=4;tx=0;

N=prompt("地図ブロックは何 段 作製しますか");alert(N);
M=prompt("地図ブロックは何 列 作製しますか");alert(M);

A=prompt("1番目のブロックの 左上隅に読み込むタイル画像のファイル名の前7桁はなんですか");alert(A);
B=prompt("1番目のブロックの 左上隅に読み込むタイル画像のファイル名の後7桁はなんですか");alert(B);
E=prompt("1番目のブロックの 右下隅に読み込むタイル画像のファイル名の前7桁はなんですか");alert(E);
F=prompt("1番目のブロックの 右下隅に読み込むタイル画像のファイル名の後7桁はなんですか");alert(F);
n=parseFloat(F)-parseFloat(B)+1;//alert(n);
m=parseFloat(E)-parseFloat(A)+1;//alert(m);
T=(m)*(n);//alert(T);
Tx=(M)*(N);//alert(Tx);

//T = prompt("処理するタイル画像は何枚ですか");alert(T);
//D = prompt("タイル画像の解像度は何 dpi/inchですか");alert(D);
//W=prompt("タイル画像の幅は何ピクセルですか");alert(W);
//H=prompt("タイル画像の高さは何ピクセルですか");alert(H);
//m=prompt("タイル画像の段数は何段ですか");alert(m);
//alert("地図の幅は"+"m*W"+"になります。");
//n=prompt("タイル画像の列数は何列ですか。");alert(n);
//alert(n*H);
//ph=prompt("タイル画像のはいっているフォルダーの名前は何ですか");alert(ph);
//sf=prompt("タイル画像のサヒックスは .png ですか。良ければ .png と入力してください。");alert(sf);

// =======================================================
for(tx=0;tx<Tx;tx++)
{
px=tx/N;
//txをNで割った商は列数,余は段数目
qx=px.toString().split(".");
//Qxは段数目
Qx=tx-(N*parseFloat(qx[0]));

// =======新規ファイルを作る===========================
var idMk = charIDToTypeID( "Mk " );
var desc1 = new ActionDescriptor();
var idNw = charIDToTypeID( "Nw " );
var desc2 = new ActionDescriptor();
var idNm = charIDToTypeID( "Nm " );
desc2.putString( idNm, """A+B+C+D""" );
var idMd = charIDToTypeID( "Md " );
var idRGBM = charIDToTypeID( "RGBM" );
desc2.putClass( idMd, idRGBM );
var idWdth = charIDToTypeID( "Wdth" );
var idRlt = charIDToTypeID( "#Rlt" );
//================================地図の幅 M*W=======

desc2.putUnitDouble( idWdth, idRlt, m*W *72/D);
var idHght = charIDToTypeID( "Hght" );
var idRlt = charIDToTypeID( "#Rlt" );
//================================地図の高さ n*H=======
desc2.putUnitDouble( idHght, idRlt, n*H *72/D);
var idRslt = charIDToTypeID( "Rslt" );
var idRsl = charIDToTypeID( "#Rsl" );
//==========================地図の解像度 D========
desc2.putUnitDouble( idRslt, idRsl, D );
var idpixelScaleFactor = stringIDToTypeID( "pixelScaleFactor" );
desc2.putDouble( idpixelScaleFactor, 1.000000 );
var idFl = charIDToTypeID( "Fl " );
var idFl = charIDToTypeID( "Fl " );
var idBckC = charIDToTypeID( "BckC" );
desc2.putEnumerated( idFl, idFl, idBckC );
var idDpth = charIDToTypeID( "Dpth" );
desc2.putInteger( idDpth, 8 );
var idprofile = stringIDToTypeID( "profile" );
desc2.putString( idprofile, """sRGB IEC61966-2.1""" );
var idDcmn = charIDToTypeID( "Dcmn" );
desc1.putObject( idNw, idDcmn, desc2 );
executeAction( idMk, desc1, DialogModes.NO );
// =======================================================


//T=(m)*(n)

for(t=0;t<T;t++)
{
// =======ここから繰り返しをはじめる=======読み込ファイルの名==================
p=t/n;
q= p.toString().split(".");
//alert("整数部:"+q[0]+", 小数部:"+q[1]);
//===Qはy方向の位置
Q=t-(n*parseFloat(q[0]));
//alert(Q);

AA=parseFloat(A)+parseFloat(qx[0])*m+parseFloat(q[0])+10000000;
//alert(AA);
000;BB=parseFloat(B)+(Qx)*n+(Q)+10000000
//alert(BB);
AAA=AA.toString();
//alert(AAA);
BBB=BB.toString();
//alert(BBB);
AAAA=AAA.substring(1.7);
BBBB=BBB.substring(1.7);
var U="Users";i="imac27";De="Desktop";
//alert("/"+U+"/"+i+"/"+De+"/"+ph+"_files"+"/"+AAAA+BBBB+sf);
S="/"+U+"/"+i+"/"+De+"/"+ph+"_files"+"/"+AAAA+BBBB+sf ;
//alert(S);

 

// ======================================
var idOpn = charIDToTypeID( "Opn " );
var desc9 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
desc9.putPath( idnull, new File( S) );
executeAction( idOpn, desc9, DialogModes.NO );

// =======================================================
var idsetd = charIDToTypeID( "setd" );
var desc10 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref4 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idfsel = charIDToTypeID( "fsel" );
ref4.putProperty( idChnl, idfsel );
desc10.putReference( idnull, ref4 );
var idT = charIDToTypeID( "T " );
var idOrdn = charIDToTypeID( "Ordn" );
var idAl = charIDToTypeID( "Al " );
desc10.putEnumerated( idT, idOrdn, idAl );
executeAction( idsetd, desc10, DialogModes.NO );

// =======================================================
var idcopy = charIDToTypeID( "copy" );
executeAction( idcopy, undefined, DialogModes.NO );

// =======================================================
var idCls = charIDToTypeID( "Cls " );
executeAction( idCls, undefined, DialogModes.NO );

// =======================================================
var idpast = charIDToTypeID( "past" );
var desc11 = new ActionDescriptor();
var idAntA = charIDToTypeID( "AntA" );
var idAnnt = charIDToTypeID( "Annt" );
var idAnno = charIDToTypeID( "Anno" );
desc11.putEnumerated( idAntA, idAnnt, idAnno );
executeAction( idpast, desc11, DialogModes.NO );

// ==========移動する量の計算===========================

Ly=H*(Q)-H*(n-1)/2-4;

Lx=W*parseFloat(q[0])-W*(m-1)/2-4;

// =======================================================
var idmove = charIDToTypeID( "move" );
var desc12 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref5 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref5.putEnumerated( idLyr, idOrdn, idTrgt );
desc12.putReference( idnull, ref5 );
var idT = charIDToTypeID( "T " );
var desc13 = new ActionDescriptor();

var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
//====================================Lx==========
desc13.putUnitDouble( idHrzn, idPxl, Lx );

var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
//===================================Ly===============
desc13.putUnitDouble( idVrtc, idPxl, Ly );

var idOfst = charIDToTypeID( "Ofst" );
desc12.putObject( idT, idOfst, desc13 );
executeAction( idmove, desc12, DialogModes.NO );

// =======================================================
var idslct = charIDToTypeID( "slct" );
var desc14 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref6 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
ref6.putName( idLyr, "背景" );
desc14.putReference( idnull, ref6 );
var idMkVs = charIDToTypeID( "MkVs" );
desc14.putBoolean( idMkVs, false );
executeAction( idslct, desc14, DialogModes.NO );

// =========ここまでが繰り返しの範囲=======str1 = n.toString();================
}

 

// ================レイヤー統合=======================================
var idFltI = charIDToTypeID( "FltI" );
executeAction( idFltI, undefined, DialogModes.NO );

 

// ==============-保存場所=========================================
Z=parseFloat(tx)
Sa="/"+U+"/"+i+"/"+De+"/"+ph+"_files"+"/"
Save=Sa+ph+Z+".psb"
//alert(Save)
// =======================================================
var idsave = charIDToTypeID( "save" );
var desc15 = new ActionDescriptor();
var idAs = charIDToTypeID( "As " );
var desc16 = new ActionDescriptor();
var idmaximizeCompatibility = stringIDToTypeID( "maximizeCompatibility" );
desc16.putBoolean( idmaximizeCompatibility, true );
var idPhteight = charIDToTypeID( "Pht8" );
desc15.putObject( idAs, idPhteight, desc16 );
var idIn = charIDToTypeID( "In " );

desc15.putPath( idIn, new File(Save));

var idDocI = charIDToTypeID( "DocI" );
desc15.putInteger( idDocI, 1268 );
var idLwCs = charIDToTypeID( "LwCs" );
desc15.putBoolean( idLwCs, true );
var idsaveStage = stringIDToTypeID( "saveStage" );
var idsaveStageType = stringIDToTypeID( "saveStageType" );
var idsaveBegin = stringIDToTypeID( "saveBegin" );
desc15.putEnumerated( idsaveStage, idsaveStageType, idsaveBegin );
executeAction( idsave, desc15, DialogModes.NO );

// =======================================================
var idsave = charIDToTypeID( "save" );
var desc17 = new ActionDescriptor();
var idAs = charIDToTypeID( "As " );
var desc18 = new ActionDescriptor();
var idmaximizeCompatibility = stringIDToTypeID( "maximizeCompatibility" );
desc18.putBoolean( idmaximizeCompatibility, true );
var idPhteight = charIDToTypeID( "Pht8" );
desc17.putObject( idAs, idPhteight, desc18 );
var idIn = charIDToTypeID( "In " );

desc17.putPath( idIn, new File(Save ) );

var idDocI = charIDToTypeID( "DocI" );
desc17.putInteger( idDocI, 1268 );
var idLwCs = charIDToTypeID( "LwCs" );
desc17.putBoolean( idLwCs, true );
var idsaveStage = stringIDToTypeID( "saveStage" );
var idsaveStageType = stringIDToTypeID( "saveStageType" );
var idsaveSucceeded = stringIDToTypeID( "saveSucceeded" );
desc17.putEnumerated( idsaveStage, idsaveStageType, idsaveSucceeded );
executeAction( idsave, desc17, DialogModes.NO );

 

// =======================================================
var idCls = charIDToTypeID( "Cls " );
executeAction( idCls, undefined, DialogModes.NO );

 

タイル画像合成スクリプト

左記Scriptを使用する時は、自己の責任に置いて、ご使用ください。

左記のScriptのサフィクスは.jsxです。

使用する時、タイル画像の格納されているホルダーをDisk topに置いてください。

なお、各自のPCのsystemによりDisk名やUers名が異なるので、プログラム本文中U= ,i= ,De= ,の値は変更してください。

タイル画像の縦横枚数を確認し、入力する隅のタイル画像の値を超えるとファイルが読み込めなくなり、Scriptがフリーズしますのでご注意ください。

値が範囲内ならば、作製する地図は正方形でなくても、縦長矩形、横長矩形でも作製出来ます。

初期値は32段×32段にして有りますが、此れより大きいタイル画像でも読み込みます。

ただし、61段×61段の場合、作製に155分も掛かっているので,数枚に分けて作製する方が早いでしょう。

数回に分けても、その接合部の画像は、手動でカットしたものではないので、範囲指定を確実に、隣接するように指定すれば、誤差なしで合成出来ます。

 

移動する量の計算で1,2行目の最後に-4を付けているが、論理的には必要ないはずですが、Photoshopの特質?何回テストしても下に4ピクセルズレるので調整としていれました。(原因は、当初立ち上げの基礎ファイルの大きさが万単位の大きさが有るので、縮小表示され、256のファイルをペーストするときに、演算の端数が生じているか、300-256=4ですが、右格子にに吸い付くのか、左格子に吸い付くのか、下ズレの時はLy、右ズレの時はLxに-4を付けてください。)

左記Scriptは横に数列、縦に数段を連続して作動させるScriptです。

256段×256列のタイル画像を1つのホルダーに入れて、32段×32段の地図結合を8行8列すなわち64回自動処理するScript を書き、64枚の画像をPhotoShopで繫ぐようにしました。64枚はタイル画像の辺そのものなので、隙間なくつながります。

約20時間で64枚作製。

この64枚をPhotoshopで結合し、京都市役所-神戸市役所の2点間距離を国土地理院などの計測ブログラムで調べ、作製した地図のこの2点間のピクセル数を計測し、1,000mが510.35ピクセルであることを確認し、メッシュを書き込んだ。

メッシュの書き込みも、photoshop Scripを使ったので、今迄の精度より一段精度が上がりました。

緯度経度も、計算で出せるのですが、1ピクセルが3から4mに相当(約2m線の太さ)するので、10分ピッチしか書き込んでいません。

以上の成果品をKrpano

で見れるようにします。

ここにアクセスしてください。

 

 

  メッシュ書き込みScript  
 

#target photoshop
var originalUnit = preferences.rulerUnits;
preferences.rulerUnits = Units.PIXELS;

var Name="";

6
var X=0;Y=0;X0=0;Y0=0;X1=0;Y1=0;X2=0;Y2=0;X3=0;Y3=0;X4=0;Y4=0
var Xp=256;Yp=256;
var W=0;H=0;m=510.35;n=510.35
var Dot=1;Rd=101.626459;Grn=50.408559 ;Bl=247.000000 ;

Name=prompt("メッシュを書きたい地図の名前は ??? . ?? ");alert(Name);
W=prompt("画像の幅は何ピクセル有りますか。");alert(W);
H=prompt("画像の高さは何ピクセル有りますか。");alert(H);

X0=prompt("photoshopの座標より右に何ピクセルを基点としますか。");alert(X0);
Y0=prompt("photoshopの座標より下に何ピクセルを基点としますか。");alert(Y0);

Pxl=prompt("線の太さは何Dotにしますか");alert(Dot);
//Rd=prompt("線の太さはRd要素は");alert(Rd);
//Grn=prompt("線の太さはGrn要素は");alert(Grn);
//Bl=prompt("線の太さはBl要素は");alert(Bl);

m=prompt("メッシュのX方向のピッチは何ピクセルですか。");alert(m);
n=prompt("メッシュのY方向のピッチは何ピクセルですか。");alert(n);

var U="Users";i="imac27";De="Desktop";
//alert("/"+U+"/"+i+"/"+De+"/"+"/"+Name);
Name="/"+U+"/"+i+"/"+De+"/"+Name ;
//alert(Name);

// ==============横==線引き開始====W/X@=======
p=(Y0-Y3)/n;
q= p.toString().split(".");
//alert("整数部:"+q[0]+", 小数部:"+q[1]);
//===qはy方向の位置
Q=Y0-(n*parseFloat(q[0]));
//=Qがスタート点になる========

for(t=0;t<(H-Q)/n;t++)
{

Y1=Q+n*t;X1=0;
Y2=Q+n*t;X2=W;

// =======================================================
var idOpn = charIDToTypeID( "Opn " );
var desc523 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
desc523.putPath( idnull, new File( Name ) );
executeAction( idOpn, desc523, DialogModes.NO );

// =======================================================
var idMk = charIDToTypeID( "Mk " );
var desc524 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref235 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
ref235.putClass( idLyr );
desc524.putReference( idnull, ref235 );
executeAction( idMk, desc524, DialogModes.NO );

// =======================================================

// =======================================================
var idMk = charIDToTypeID( "Mk " );
var desc525 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref236 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
ref236.putClass( idcontentLayer );
desc525.putReference( idnull, ref236 );
var idUsng = charIDToTypeID( "Usng" );
var desc526 = new ActionDescriptor();
var idType = charIDToTypeID( "Type" );
var desc527 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc528 = new ActionDescriptor();
var idRd = charIDToTypeID( "Rd " );
desc528.putDouble( idRd, 0.000000);
var idGrn = charIDToTypeID( "Grn " );
desc528.putDouble( idGrn, 0.000000 );
var idBl = charIDToTypeID( "Bl " );
desc528.putDouble( idBl, 0.000000 );
var idRGBC = charIDToTypeID( "RGBC" );
desc527.putObject( idClr, idRGBC, desc528 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc526.putObject( idType, idsolidColorLayer, desc527 );

var idShp = charIDToTypeID( "Shp " );
var desc529 = new ActionDescriptor();
var idStrt = charIDToTypeID( "Strt" );
var desc530 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc530.putUnitDouble( idHrzn, idPxl, X1 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc530.putUnitDouble( idVrtc, idPxl, Y1);
var idPnt = charIDToTypeID( "Pnt " );
desc529.putObject( idStrt, idPnt, desc530 );

var idEnd = charIDToTypeID( "End " );
var desc531 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc531.putUnitDouble( idHrzn, idPxl, X2 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc531.putUnitDouble( idVrtc, idPxl, Y2 );
var idPnt = charIDToTypeID( "Pnt " );
desc529.putObject( idEnd, idPnt, desc531 );

var idWdth = charIDToTypeID( "Wdth" );
var idPxl = charIDToTypeID( "#Pxl" );

desc529.putUnitDouble( idWdth, idPxl, 0.500000 );
var idStrA = charIDToTypeID( "StrA" );
var desc532 = new ActionDescriptor();
var idWdth = charIDToTypeID( "Wdth" );
var idPrc = charIDToTypeID( "#Prc" );
desc532.putUnitDouble( idWdth, idPrc, 500.000000 );
var idLngt = charIDToTypeID( "Lngt" );
var idPrc = charIDToTypeID( "#Prc" );
desc532.putUnitDouble( idLngt, idPrc, 1000.000000 );
var idCncv = charIDToTypeID( "Cncv" );
var idPrc = charIDToTypeID( "#Prc" );
desc532.putUnitDouble( idCncv, idPrc, 25.000000 );
var idcArw = charIDToTypeID( "cArw" );
desc529.putObject( idStrA, idcArw, desc532 );
var idLn = charIDToTypeID( "Ln " );
desc526.putObject( idShp, idLn, desc529 );

var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc533 = new ActionDescriptor();
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc533.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc533.putBoolean( idstrokeEnabled, true );
var idfillEnabled = stringIDToTypeID( "fillEnabled" );
desc533.putBoolean( idfillEnabled, true );
var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );
var idPnt = charIDToTypeID( "#Pnt" );
desc533.putUnitDouble( idstrokeStyleLineWidth, idPnt, 0.120000 );
var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );
var idPnt = charIDToTypeID( "#Pnt" );
desc533.putUnitDouble( idstrokeStyleLineDashOffset, idPnt, 0.000000 );
var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );
desc533.putDouble( idstrokeStyleMiterLimit, 100.000000 );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );
desc533.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );
desc533.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleAlignInside = stringIDToTypeID( "strokeStyleAlignInside" );
desc533.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignInside );
var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );
desc533.putBoolean( idstrokeStyleScaleLock, false );
var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );
desc533.putBoolean( idstrokeStyleStrokeAdjust, false );
var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );
var list70 = new ActionList();
desc533.putList( idstrokeStyleLineDashSet, list70 );
var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );
var idBlnM = charIDToTypeID( "BlnM" );
var idNrml = charIDToTypeID( "Nrml" );
desc533.putEnumerated( idstrokeStyleBlendMode, idBlnM, idNrml );
var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );
var idPrc = charIDToTypeID( "#Prc" );
desc533.putUnitDouble( idstrokeStyleOpacity, idPrc, 100.000000 );
var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );
var desc534 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc535 = new ActionDescriptor();
var idRd = charIDToTypeID( "Rd " );
desc535.putDouble( idRd, 0.000000 );
var idGrn = charIDToTypeID( "Grn " );
desc535.putDouble( idGrn, 0.000000 );
var idBl = charIDToTypeID( "Bl " );
desc535.putDouble( idBl, 0.000000 );
var idRGBC = charIDToTypeID( "RGBC" );
desc534.putObject( idClr, idRGBC, desc535 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc533.putObject( idstrokeStyleContent, idsolidColorLayer, desc534 );
var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );
desc533.putDouble( idstrokeStyleResolution, 300.000000 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc526.putObject( idstrokeStyle, idstrokeStyle, desc533 );
var idcontentLayer = stringIDToTypeID( "contentLayer" );
desc525.putObject( idUsng, idcontentLayer, desc526 );
executeAction( idMk, desc525, DialogModes.NO );

}

 

//===========

// ==============縦==線引き開始====W/X@=======
r=(X0-X1)/m;
s= r.toString().split(".");
//alert("整数部:"+s[0]+", 小数部:"+s[1]);
//===sはy方向の位置
S=X0-(m*parseFloat(s[0]));
//=Qがスタート点になる========

for(t=0;t<(W-S)/m;t++)
{

X3=S+m*t;Y3=0;
X4=S+m*t;Y4=H;

// =======================================================
var idOpn = charIDToTypeID( "Opn " );
var desc523 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
desc523.putPath( idnull, new File( Name ) );
executeAction( idOpn, desc523, DialogModes.NO );

// =======================================================
var idMk = charIDToTypeID( "Mk " );
var desc524 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref235 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
ref235.putClass( idLyr );
desc524.putReference( idnull, ref235 );
executeAction( idMk, desc524, DialogModes.NO );

// =======================================================

// =======================================================
var idMk = charIDToTypeID( "Mk " );
var desc525 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref236 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
ref236.putClass( idcontentLayer );
desc525.putReference( idnull, ref236 );
var idUsng = charIDToTypeID( "Usng" );
var desc526 = new ActionDescriptor();
var idType = charIDToTypeID( "Type" );
var desc527 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc528 = new ActionDescriptor();
var idRd = charIDToTypeID( "Rd " );
desc528.putDouble( idRd, 11.626459 );
var idGrn = charIDToTypeID( "Grn " );
desc528.putDouble( idGrn, 50.408559 );
var idBl = charIDToTypeID( "Bl " );
desc528.putDouble( idBl, 247.000000 );
var idRGBC = charIDToTypeID( "RGBC" );
desc527.putObject( idClr, idRGBC, desc528 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc526.putObject( idType, idsolidColorLayer, desc527 );

var idShp = charIDToTypeID( "Shp " );
var desc529 = new ActionDescriptor();
var idStrt = charIDToTypeID( "Strt" );
var desc530 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc530.putUnitDouble( idHrzn, idPxl, X3 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc530.putUnitDouble( idVrtc, idPxl, Y3);
var idPnt = charIDToTypeID( "Pnt " );
desc529.putObject( idStrt, idPnt, desc530 );

var idEnd = charIDToTypeID( "End " );
var desc531 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idPxl = charIDToTypeID( "#Pxl" );
desc531.putUnitDouble( idHrzn, idPxl, X4 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idPxl = charIDToTypeID( "#Pxl" );
desc531.putUnitDouble( idVrtc, idPxl, Y4 );
var idPnt = charIDToTypeID( "Pnt " );
desc529.putObject( idEnd, idPnt, desc531 );

var idWdth = charIDToTypeID( "Wdth" );
var idPxl = charIDToTypeID( "#Pxl" );

desc529.putUnitDouble( idWdth, idPxl, 0.500000 );
var idStrA = charIDToTypeID( "StrA" );
var desc532 = new ActionDescriptor();
var idWdth = charIDToTypeID( "Wdth" );
var idPrc = charIDToTypeID( "#Prc" );
desc532.putUnitDouble( idWdth, idPrc, 500.000000 );
var idLngt = charIDToTypeID( "Lngt" );
var idPrc = charIDToTypeID( "#Prc" );
desc532.putUnitDouble( idLngt, idPrc, 1000.000000 );
var idCncv = charIDToTypeID( "Cncv" );
var idPrc = charIDToTypeID( "#Prc" );
desc532.putUnitDouble( idCncv, idPrc, 0.000000 );
var idcArw = charIDToTypeID( "cArw" );
desc529.putObject( idStrA, idcArw, desc532 );
var idLn = charIDToTypeID( "Ln " );
desc526.putObject( idShp, idLn, desc529 );

var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc533 = new ActionDescriptor();
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc533.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc533.putBoolean( idstrokeEnabled, true );
var idfillEnabled = stringIDToTypeID( "fillEnabled" );
desc533.putBoolean( idfillEnabled, true );
var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );
var idPnt = charIDToTypeID( "#Pnt" );
desc533.putUnitDouble( idstrokeStyleLineWidth, idPnt, 0.500000 );
var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );
var idPnt = charIDToTypeID( "#Pnt" );
desc533.putUnitDouble( idstrokeStyleLineDashOffset, idPnt, 0.500000 );
var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );
desc533.putDouble( idstrokeStyleMiterLimit, 100.000000 );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );
desc533.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );
desc533.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleAlignInside = stringIDToTypeID( "strokeStyleAlignInside" );
desc533.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignInside );
var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );
desc533.putBoolean( idstrokeStyleScaleLock, false );
var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );
desc533.putBoolean( idstrokeStyleStrokeAdjust, false );
var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );
var list70 = new ActionList();
desc533.putList( idstrokeStyleLineDashSet, list70 );
var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );
var idBlnM = charIDToTypeID( "BlnM" );
var idNrml = charIDToTypeID( "Nrml" );
desc533.putEnumerated( idstrokeStyleBlendMode, idBlnM, idNrml );
var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );
var idPrc = charIDToTypeID( "#Prc" );
desc533.putUnitDouble( idstrokeStyleOpacity, idPrc, 100.000000 );
var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );
var desc534 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc535 = new ActionDescriptor();
var idRd = charIDToTypeID( "Rd " );
desc535.putDouble( idRd, 6.000000 );
var idGrn = charIDToTypeID( "Grn " );
desc535.putDouble( idGrn, 0.560311 );
var idBl = charIDToTypeID( "Bl " );
desc535.putDouble( idBl, 0.470817 );
var idRGBC = charIDToTypeID( "RGBC" );
desc534.putObject( idClr, idRGBC, desc535 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc533.putObject( idstrokeStyleContent, idsolidColorLayer, desc534 );
var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );
desc533.putDouble( idstrokeStyleResolution, 300.000000 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc526.putObject( idstrokeStyle, idstrokeStyle, desc533 );
var idcontentLayer = stringIDToTypeID( "contentLayer" );
desc525.putObject( idUsng, idcontentLayer, desc526 );
executeAction( idMk, desc525, DialogModes.NO );

}

//=============

 

var idTrnf = charIDToTypeID( "Trnf" );
var desc536 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref237 = new ActionReference();
var idPath = charIDToTypeID( "Path" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref237.putEnumerated( idPath, idOrdn, idTrgt );
desc536.putReference( idnull, ref237 );
var idWdth = charIDToTypeID( "Wdth" );
var idPrc = charIDToTypeID( "#Prc" );
desc536.putUnitDouble( idWdth, idPrc, 0.080034 );
var idHght = charIDToTypeID( "Hght" );
var idPrc = charIDToTypeID( "#Prc" );
desc536.putUnitDouble( idHght, idPrc, 100.000000 );
var idFTcs = charIDToTypeID( "FTcs" );
var idQCSt = charIDToTypeID( "QCSt" );
var idQcszero = charIDToTypeID( "Qcs0" );
desc536.putEnumerated( idFTcs, idQCSt, idQcszero );
executeAction( idTrnf, desc536, DialogModes.NO );
//===========================

メッシュ書き込みScript

左記Scriptを使用する時は、自己の責任に置いて、ご使用ください。

左記のScriptのサフィクスは.jsxです。

使用する時、画像をDisk topに置いてください。

なお、各自のPCのsystemによりDisk名やUers名が異なるので、プログラム本文中U= ,i= ,De= ,の値は変更してください。

メッシュの基点を入力しない場合は初期値0となり、Photoshopの基点がメッシュの基点となります。

線色合いを変更したい時はRd=101.626459;Grn=50.408559 ;Bl=247.000000の値を変更してください。

 

    Back