web-dev-qa-db-ja.com

Photoshopドキュメントをグリッドに分割するにはどうすればよいですか?

たとえば、画像を含むPhotoshopドキュメントがある場合。どうすればグリッドに分割できますか?行うのと同様です:-長方形を選択します-カットを介して新しいレイヤー-次の長方形に移動します垂直方向に繰り返しますか?

それを自動化/パラメータ化するスクリプト/プラグインはありますか?

2
George Profenza

すべての素晴らしい答え、貢献に感謝します。

私が言ったように、私はPhotoshopのためにそこに何かがあるかどうか疑問に思います。

ドキュメントの目的で、ここに私が書いた小さなスクリプトがあります:

var doc  = app.activeDocument;
var arranger = makeDialog();

arranger .arrange.onClick = function(){
    if(isNaN(parseInt(arranger.w.text)) || isNaN(parseInt(arranger.h.text)) || isNaN(parseInt(arranger.c.text)) || isNaN(parseInt(arranger.r.text))){
        alert('Yo! Can you feed \' dis dialog some integer numbers ?\n For Real!');
    }else{
        sliceLayer(parseInt(arranger.w.text),parseInt(arranger.h.text),parseInt(arranger.r.text),parseInt(arranger.c.text));
    }
    arranger.close();
}

arranger.show();

function sliceLayer(w,h,r,c){
    var hw = w * 0.5;
    var hh = h * 0.5;
    var l0 = doc.activeLayer;
    for(var j = 0 ; j < r ; j++){
        for(var i = 0 ; i < c; i++){
            var x = i * w; //edited
            var y = j * h; //here
            //select
            doc.selection.select([[x,y],[x+w,y],[x+w,y+h],[x,y+h]]);
            //new layer via cut
            doc.selection.cut();
            var layer  = doc.artLayers.add();
            doc.paste();
            //move
            //$.writeln('translate x: '+(y)+', y: '+(x));
            // move layer with relative coordinates
            // layer.translate(y,x); 
            // move layer with absolute coordinates
            MoveLayerTo( layer, x, y );
            doc.activeLayer = l0;
        }
    }
    l0.remove();//remove original layer(now empty)
}


function makeDialog(){
        var dialog = new Window('dialog','Slice and Dice');
        dialog.frameLocation = [300,300];
        dialog.w = dialog.add('edittext',undefined,'Selection width');
        dialog.w.prefferedSize = [200,50];
        dialog.h = dialog.add('edittext',undefined,'Selection height');
        dialog.h.prefferedSize = [200,50];
        dialog.c = dialog.add('edittext',undefined,'Grid Columns(V sections)');
        dialog.c.prefferedSize = [200,50];
        dialog.r = dialog.add('edittext',undefined,'Grid Rows(H sections)');
        dialog.r.prefferedSize = [200,50];
        dialog.arrange = dialog.add('button',undefined,'Chop Chop');
        return dialog;
}

//******************************************
// MOVE LAYER TO
// Author: Max Kielland
//
// Moves layer fLayer to the absolute
// position fX,fY. The unit of fX and fY are
// the same as the ruler setting. 

function MoveLayerTo(fLayer,fX,fY) {

    var Position = fLayer.bounds;
    Position[0] = fX - Position[0];
    Position[1] = fY - Position[1];

    fLayer.translate(-Position[0],-Position[1]);
}

これをPhotoshop /プリセット/スクリプトに.jsxファイルとして保存すると、[ファイル]メニューの[スクリプト]からアクセスできるようになります。コンピュータのどこにいても、スクリプトで[ファイル]-> [スクリプト]-> [参照...]を使用することもできます。

それは4つのことを要求します:

  • 選択幅—グリッド内の各ブロックの幅
  • 選択の高さ—グリッド内の各ブロックの高さ
  • グリッド列(Vセクション)—分割された列の数
  • グリッド行(Hセクション)—分割された後の行数

ドキュメントが見つからないというエラーが発生した場合は、実行する前にまずイメージを開く必要があります。

このJSXアプローチの問題は、大規模なサブディビジョン(100x100)では少し遅いことです。

MATLAB/Photoshop通信を試してみる方が速いと思いますが、今はスキップします。

CopyPixels()を使用してactionscript 3で同じ目標を達成し、それはかなり高速です。

2
George Profenza

私がこれを行った唯一の方法は、ガイド付きのグリッドをレイアウトしてから、スライスツールを使用して画像をスライスすることです。これにより、画像を多数の個別の部分に分割できます。スライスツールを使用した後、Web用に保存し、スライスのみを個別の画像ファイルとしてエクスポートできます。

4
warrenkopp

これは私がここで答えた質問に似ています:これを行うことができる無料のツールをお勧めしました。pngをエクスポートし、そこにpngをロードして、ボタンを押します。

他の解決策も提案されました。

複数の個別の同時作物選択を保存できる画像エディタ?(無料プログラムと有料プログラムの両方を探しています)

1
S.gfx