如何将 Photoshop 文档拆分为网格?

如何将 Photoshop 文档拆分为网格?

例如,如果我有一个包含图像的 Photoshop 文档。我怎样才能将其分成网格?类似于执行以下操作:- 选择一个矩形 - 通过剪切创建新图层 - 垂直移动到下一个矩形重复?

有任何脚本/插件可以自动化/参数化吗?

答案1

我这样做的唯一方法是用参考线布局网格,然后使用切片工具对图像进行切片。这样可以将图像分成许多单独的部分。使用切片工具后,您可以保存为 Web,然后仅导出切片,每个切片作为单独的图像文件。

答案2

所有答案都很好,感谢您的贡献。

正如我所说的,我想知道是否有适用于 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]);
}

如果您将其作为 .jsx 文件保存在 Photoshop/Presets/Scripts 中,则应该能够通过文件菜单中的脚本访问它。您还可以在计算机上的任何位置使用文件 -> 脚本 -> 浏览... 来访问脚本。

它将要求四件事:

  • 选择宽度——你希望网格中每个块的宽度
  • 选择高度——你希望网格中每个块的高度
  • 网格列(V 部分)——拆分后应该有多少列
  • 网格行(H 部分)——拆分后应该有多少行

如果您收到有关未找到文档的错误,您只需先打开一个图像然后再运行它。

这种 JSX 方法的问题在于,对于较大的细分(100x100)来说,它有点慢。

我猜测尝试使用 MATLAB/Photoshop 通信将会更快,但我现在先跳过这一步。

使用 copyPixels() 在 actionscript 3 中实现了相同的目标,而且速度非常快。

答案3

这与我在这里回答的一个问题类似:我确实推荐了一个免费工具,它允许您执行此操作,您可以导出 png,在那里加载 png 并点击按钮......

此外还提出了其他解决方案。

允许同时保存多个单独裁剪选择的图像编辑器?(寻找免费和付费程序)

相关内容