【问题标题】:Tile image in current place in Photoshop在 Photoshop 中的当前位置平铺图像
【发布时间】:2021-01-19 12:08:25
【问题描述】:

是否有一些方法(或脚本)可以在 Photoshop(或其他图像编辑软件)中创建重复的图像平铺?
需要保持图像位置和旋转。

来自图像 From

目标图像平铺: To

【问题讨论】:

    标签: repeat photoshop tile tessellation


    【解决方案1】:

    平铺背后的原理是tessellation

    在您的示例中,沿其局部 x 轴(或如我们所见,沿对角线向下和向右)复制并移动瓦片一定量,然后再次沿 y 轴(向下和向左)移动

    加载图像,它会重复瓷砖 12 次。然后,您应该能够根据您对其他图像的需要调整脚本。

    // Switch off any dialog boxes
    displayDialogs = DialogModes.ERROR; // OFF 
    
    var originalUnits = app.preferences.rulerUnits;
    app.preferences.rulerUnits = Units.PIXELS;
    
    
    var duplicatLayerName = "tile";
    var offsetX1 = 215; // pixels
    var offsetY1 = 111; // pixels
    var offsetX2 = -103; // pixels
    var offsetY2 = 178; // pixels
    var numTilesX = 3;
    var numTilesY = 4
    
    // tile them along the x axis
    for (var i = 0; i < numTilesX; i++)
    {
      duplicate_layer(duplicatLayerName);
      transform(offsetX1, offsetY1, 0);
      // merge down as we go
      app.activeDocument.activeLayer.merge();
    }
    
    // now do the same for the y axis
    for (var i = 0; i < numTilesY; i++)
    {
      duplicate_layer(duplicatLayerName);
      transform(offsetX2, offsetY2, 0);
      // merge down as we go
      app.activeDocument.activeLayer.merge();
    }
    
    
    
    // Set measuring units back to how they were
    app.preferences.rulerUnits = originalUnits;
    
    
    // Set Display Dialogs back to normal
    displayDialogs = DialogModes.ALL; // NORMAL
    
    
    function transform(dX, dY, angle)
    {
      if (angle == undefined ) angle = 0;
    
      //transform
      // =======================================================
      var id769 = charIDToTypeID( "Trnf" );
      var desc98 = new ActionDescriptor();
      var id770 = charIDToTypeID( "null" );
      var ref59 = new ActionReference();
      var id771 = charIDToTypeID( "Lyr " );
      var id772 = charIDToTypeID( "Ordn" );
      var id773 = charIDToTypeID( "Trgt" );
      ref59.putEnumerated( id771, id772, id773 );
      desc98.putReference( id770, ref59 );
      var id774 = charIDToTypeID( "FTcs" );
      var id775 = charIDToTypeID( "QCSt" );
      var id776 = charIDToTypeID( "Qcsa" );
      desc98.putEnumerated( id774, id775, id776 );
      var id777 = charIDToTypeID( "Ofst" );
      var desc99 = new ActionDescriptor();
      var id778 = charIDToTypeID( "Hrzn" );
      var id779 = charIDToTypeID( "#Pxl" );
      desc99.putUnitDouble( id778, id779, dX );
      var id780 = charIDToTypeID( "Vrtc" );
      var id781 = charIDToTypeID( "#Pxl" );
      desc99.putUnitDouble( id780, id781, dY );
      var id782 = charIDToTypeID( "Ofst" );
      desc98.putObject( id777, id782, desc99 );
      var id783 = charIDToTypeID( "Angl" );
      var id784 = charIDToTypeID( "#Ang" );
      desc98.putUnitDouble( id783, id784, angle );
      executeAction( id769, desc98, DialogModes.NO );
    }
    
    
    // function DUPLICATE LAYER (str)
    // --------------------------------------------------------
    function duplicate_layer(str)
    {
      // duplicate layer
      // =======================================================
      var id1572 = charIDToTypeID( "Dplc" );
      var desc350 = new ActionDescriptor();
      var id1573 = charIDToTypeID( "null" );
      var ref184 = new ActionReference();
      var id1574 = charIDToTypeID( "Lyr " );
      var id1575 = charIDToTypeID( "Ordn" );
      var id1576 = charIDToTypeID( "Trgt" );
      ref184.putEnumerated( id1574, id1575, id1576 );
      desc350.putReference( id1573, ref184 );
      var id1577 = charIDToTypeID( "Nm  " );
      desc350.putString( id1577, str );         // layer name here
      var id1578 = charIDToTypeID( "Vrsn" );
      desc350.putInteger( id1578, 2 );
      executeAction( id1572, desc350, DialogModes.NO );
    }
    

    结果将是这样的,可以裁剪。

    【讨论】:

    • 感谢您的回复。是的,这就是预期的结果。我的目标是自动完成,如果这些参数 numTilesX 、 numTilesY 和这些偏移量可以从图像一中计算出来。
    • 我认为在 Photoshop Extend Scripts 中是可能的,我会尝试这个方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2010-11-21
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多