美文网首页
PhotoShop JavaScript 批处理 学习四

PhotoShop JavaScript 批处理 学习四

作者: fox_rabbit | 来源:发表于2018-09-06 20:48 被阅读0次

  前面我们所处理的图层位于图层的“根目录”下,可以直接通过docRef. artLayers. getByName获取。

image.png

  但是更多的时候,PSD文件中有许多LayerSet,要处理的图层在LayerSet中,甚至包含几层嵌套,不能直接以上面的方法获取,如下图“这还是小黄人”的文本图层在一个多层嵌套中。(要创建LayerSet点击箭头所指图标即可,创建二级LayerSet需先点击一级LayerSet。 创建LayerSet后可把图层拖到文件夹中)


image.png
  • 递归查找
      像这种情况,要获取到“这是小黄人”和“这还是小黄人”的图层就不能直接用artLayers. getByName方法了,会提示错误。这种情况,要通过递归查找来找到对应图层。以修改文本为例,我们查找并修改“这还是小黄人”的文本。我们实现一个通过递归查找来修改指定文本图层的函数。
//参数分别是文件,要查找的图层名字,要替换的名字
function changeTextLayerContent(doc, layerName, newTextString) {
//分析当前layers.length,这个layers可以是Layer也可以是LayerSet,逻辑上是当做LayerSet处理
  for (var i = 0, max = layers.length; i < max; i++) {
    //取LayerSet的每一个Layer/LayerSet
    var layerRef = doc.layers[i];
    if (layerRef.typename === "ArtLayer") {
      //找到就修改
      if (layerRef.name === layerName && layerRef.kind === LayerKind.TEXT) {
        layerRef.textItem.contents = newTextString;
      }
    } else {
      //没找到就继续递归查找
      changeTextLayerContent(layerRef, layerName, newTextString);
    }
  }
}

  我们调用这个函数

var fileRef = new File('E:/小黄人.psd');
var docRef = app.open(fileRef);

changeTextLayerContent(docRef, '这还是小黄人', '成功修改');
image.png
  • 顺序查找
      递归查找的优点是使用方便,不管图层处在什么位置都能够找到,缺点是速度慢,如果图层结构比较复杂,程序运行的时间会不忍直视。在知道图层结构关系的情况下,我们可以按结构关系顺序查找图层。
var MyLayerSet = docRef.layerSets.getByName( 'LayerSet' ); 
alert(MyLayerSet.name); 

var MyLayerSubSet = MyLayerSet.layerSets.getByName( 'LayerSubSet' ); 
alert(MyLayerSubSet.name); 

var MyTextlayer = MyLayerSubSet.artLayers.getByName( '这也是小黄人' ); 
alert(MyTextlayer.name); 

MyTextlayer.textItem.contents = '成功修改';

  注意,查找图层集的时候用的是layerSets.getByName,查找图层的时候用的是artLayers.getByName,这是需要区分的,否则程序会运行错误,这段代码的运行效果和递归查找的效果相同。

  • 直接获取

  既然我们都知道图层结构了,其实根本就不用查找,可以直接根据图层结构关系索引图层,从递归函数里我们可以看到,LayerSet和Layer的数据结构在操作上是可以同等看待的(但注意查找的时候是有区别),我们可以直接索引。

var MyTextlayer1 = docRef.layers[0].layers[0];
MyTextlayer1.textItem.contents = '成功修改一';

var MyTextlayer2 = docRef.layers[0].layers[1].layers[0];
MyTextlayer2.textItem.contents = '成功修改二';

  从上述代码我们可以看到,Layer和LayerSet按索引的获取方式是相同的,docRef.layers[0].layers[0]是一个Layer,而docRef.layers[0].layers[1]则是一个LayerSet。最终修改效果如下:


image.png

相关文章

  • PhotoShop JavaScript 批处理 学习四

      前面我们所处理的图层位于图层的“根目录”下,可以直接通过docRef. artLayers. getByNam...

  • PhotoShop JavaScript 批处理 学习一

      对图像进行程序化处理,PhotoShop也许不是最好的那个,但是由于PS受众较广,素材较多,手头能轻松找到许多...

  • PhotoShop JavaScript 批处理 学习二

    在学习一中成功定位到了图层并修改了文本信息,但修改后的图像我们需要进行保存 保存图像 但是运行这段代码会出现一个问...

  • PhotoShop JavaScript 批处理 学习三

      前面我们修改了文本图层的信息,并成功保存,但仅修改文字是不够的,更多的时候,我们需要生产不同位置的数据,并增加...

  • PhotoShop JavaScript 批处理 学习五

    生成随机字符  在前面的处理中,我们都只是将文本修改了一次,更多的时候,我们要批量生成有随机字符的图片。首先我们实...

  • PhotoShop JavaScript 批处理 入门

    PhotoShop 偏向于手工操作,但在数据量比较大的时候人工处理效率是比较低的,但是PS也提供了相应批处理的接口...

  • Photoshop批处理

    平时我们在PS的时候,一般都是一步步地手动操作。但是如果大量的照片都要进行重复的操作就头疼了。上网找到了一个PS特...

  • javascript 在 photoshop 中的应用

    javascript 做为 photoshop 支持的脚本语言,让用户可以通过编写脚本来使用 photoshop ...

  • Photoshop 加Logo批处理

    第一步:打开photoshop CS3 第二步:打开设计好的logo文件(打开后至此至终不用关闭。批处理时候也不关...

  • Photoshop 批处理压缩图片

    Photoshop是一个强大的图片处理软件,虽然目前有比较多的图片处理软件,但是好用又免费的不多,如果你电脑上没有...

网友评论

      本文标题:PhotoShop JavaScript 批处理 学习四

      本文链接:https://www.haomeiwen.com/subject/yokfgftx.html