取得に関しては、以下を参照してください。

参照:ドキュメントの大きさを取得する

参照:ドキュメントの解像度を取得する

 

ドキュメントの大きさや解像度を変更するにはdocumentオブジェクトのresizeImage関数を使用します。

Document.resizeImage (width, height, resolution, resampleMethod, amount) 

 

<引数>

width UnitValue 変更後の幅
height UnitValue 変更後の高さ
resolution double 変更後の解像度
resampleMethod object 再サンプルのアルゴリズム
amount integer ノイズを軽減(ディテールを保持のとき)

 

第1、第2引数は変更後の大きさを単位付き数値を文字列(百分率も可)で渡します。なお、数値のみの場合は単位がptとして処理されます。

また、縦横比を固定する場合は、幅か高さのいずれかの値を渡します。

activeDocument.resizeImage('100mm', undefined, undefined, ResampleMethod.AUTOMATIC, 0); // 幅優先
activeDocument.resizeImage(undefined, '100mm', undefined, ResampleMethod.AUTOMATIC, 0); // 高さ優先
activeDocument.resizeImage('100mm', '50mm', undefined, ResampleMethod.AUTOMATIC, 0); // 幅、高さがそれぞれの設定値に
activeDocument.resizeImage('50%', undefined, undefined, ResampleMethod.AUTOMATIC, 0); // 百分率も可

 

同時に解像度も変更したい場合は第3引数にDPI値を渡します。

activeDocument.resizeImage('100mm', undefined, 350, ResampleMethod.AUTOMATIC, 0); // 幅優先、解像度指定あり

 

画像の大きさはそのままに、解像度だけを変更する場合は以下のようになります。

activeDocument.resizeImage(undefined, undefined, 350, ResampleMethod.AUTOMATIC, 0); // 解像度変更

 

第4引数には再サンプル時のアルゴリズムをResampleMethod定数(参照)で渡します。

第5引数は再サンプル時のアルゴリズムが「ディテールを保持(ResampleMethod.PRESERVEDETAILS)」だった場合の「ノイズを軽減」の値です。

 

再サンプルをせずに解像度だけを変更したい場合は第4引数を「ResampleMethod.NONE」にします。

activeDocument.resizeImage(undefined, undefined, 350, ResampleMethod.NONE, 0); // 解像度優先、大きさ成り行き

 

残念なことに、第4引数が「ResampleMethod.NONE」のときに大きさだけを指定することはできません。例えば以下のコードはエラーになります。

activeDocument.resizeImage('100mm', undefined, undefined, ResampleMethod.NONE, 0);

 

<アクションマネージャを使った方法>

resizeImage関数は再サンプルをせずに「大きさ優先、解像度成り行き」という指定ができません。

また、不要な値をいちいちundefinedと記述しなければならないのも面倒です。

そこでアクションを動的に生成して実行する関数を作成しました。

 

function act_resizeImage (resampleMethod) {
    // サブ関数
    var setSize= function (desc, dir, val) {
        var uVal= new UnitValue (val);
        var num;
        if (uVal.type=='%') {
            num= uVal.value;
            desc.putUnitDouble( charIDToTypeID( dir ), charIDToTypeID('#Prc'), num );
        } else {
            num= uVal.as('pt'); // pt に変換(仕様に対応)
            desc.putUnitDouble( charIDToTypeID( dir ), charIDToTypeID('#Rlt'), num );
        }
    }
    //
    var actDesc= new ActionDescriptor();
    if (resampleMethod=='none') {
        //再サンプルなし
        if (arguments[1]['wd']) {
            setSize(actDesc, 'Wdth', arguments[1]['wd']);
            } else if (arguments[1]['ht']) {
                setSize(actDesc, 'Hght', arguments[1]['ht']);
                } else if (arguments[1]['reso']) {
                    actDesc.putUnitDouble( charIDToTypeID('Rslt'), charIDToTypeID('#Rsl'), arguments[1]['reso'] );
        }
    } else {
        // 再サンプルあり
        if (arguments[1]['wd']) {
            setSize(actDesc, 'Wdth', arguments[1]['wd']);
        }
        if (arguments[1]['ht']) {
            setSize(actDesc, 'Hght', arguments[1]['ht']);
        }
        if (arguments[1]['reso']) {
            actDesc.putUnitDouble( charIDToTypeID('Rslt'), charIDToTypeID('#Rsl'), arguments[1]['reso'] );
        }
        actDesc.putBoolean( stringIDToTypeID('scaleStyles'), true ); // 再サンプルON
        var CnsP= !(arguments[1]['wd'] && arguments[1]['ht']); // 縦横比を固定の必然性
        actDesc.putBoolean( charIDToTypeID('CnsP'), CnsP ); // 縦横比を固定
        actDesc.putEnumerated( charIDToTypeID('Intr'), charIDToTypeID('Intp'), stringIDToTypeID(resampleMethod) );
        actDesc.putInteger( charIDToTypeID('Nose'), arguments[1]['noise'] ); // ノイズを軽減
    }
    executeAction( charIDToTypeID('ImgS'), actDesc, DialogModes.NO );
}

 

<引数>

resampleMethod string 再サンプルのアルゴリズム

 

「resampleMethod」には、再サンプルのアルゴリズムを以下の文字列(表右列)で渡します。

自動 automaticInterpolation
ディテールを保持 preserveDetailsUpscale
バイキュービック法 - 滑らか(拡大) bicubicSmoother
バイキュービック法 - シャープ(縮小) bicubicSharper
バイキュービック法(滑らかなグラデーション) Bcbc
ニアレストネイバー法(ハードな輪郭) Nrst
バイリニア法 Blnr
なし none

 

第2引数にはそれぞれの変更値を連想配列オブジェクトにして渡します。

var value= {
    'wd': '100mm', // 幅
    'ht': '75mm', // 高さ
    'reso': 350 // 解像度
    'noise': 1 //ノイズの軽減
}

ただし、これらは全て記述する必要はありません。必要な値だけを記述します。

// 再サンプルなし
act_resizeImage('none', {'wd': '100mm'}); // 幅優先、ほか成り行き
act_resizeImage('none', {'ht': '75mm'}); // 高さ優先、ほか成り行き
act_resizeImage('none', {'reso': 350}); // 解像度優先、ほか成り行き

なお、再サンプルなしの場合に複数の値が記述されていた場合は、「幅」>「高さ」>「解像度」の優先順位で先にヒットした値が採用されます。

 

再サンプルかつ、縦横比を固定する場合は、幅か高さのいずれかを記述します。

act_resizeImage('automaticInterpolation', {'wd': '100mm'}); // 幅優先で縦横比を固定、解像度変更なし
act_resizeImage('automaticInterpolation', {'ht': '75mm'}); // 高さ優先で縦横比を固定、解像度変更なし
act_resizeImage('automaticInterpolation', {'wd': '100mm', 'reso': 350}); // 幅優先で縦横比を固定、解像度350に変更
act_resizeImage('automaticInterpolation', {'ht': '75mm', 'reso': 350}); // 高さ優先で縦横比を固定、解像度350に変更

 

再サンプルかつ、幅と高さの両方が記述されている場合は、それぞれの設定値に従います。

act_resizeImage('automaticInterpolation', {'wd': '100mm', 'ht': '75mm'}); // 幅、高さそれぞれ変更、解像度変更なし
act_resizeImage('automaticInterpolation', {'wd': '100mm', 'ht': '75mm', 'reso': 350}); // 幅、高さそれぞれ変更、解像度350に変更

 

 

Joomla templates by a4joomla