PS中的变量和数据组功能,和CorelDRAW的“合并打印”功能以及InDesign的“数据合并”功能非常相似。变量和数据组功能用来批量生成图片,批量替换图层内容。经常用来生成模版相同但具体内容不同的图片,例如邀请函、奖状,职员工牌等等。

PS内对该功能的解释是:指定图层的变量以控制其可见性(是否隐藏图层),替换文本字符串(替换文本图层)或替换像素(替换图片图层)。当你理解这个功能后,你会发现,官方的解释挺严谨。

图像-变量菜单下有两个命令,①定义②数据组,不管进入哪个,在其对话框的左上角,都可以切换到另一个。一般情况下,我们都是先去定义变量,定义完成后,没必要再去找图像-变量-数据组菜单,直接从当前对话框的左上角切换到数据组对话框就行,也可以用快捷键Ctrl+1或Ctrl+2来切换,还可以通过对话框右侧的上一个、下一个按钮来切换对话框(推荐这个方法 )

所谓数据组,说白了就是表格中的一行,概念等同于数据库中的一条记录,需要注意的是,我们这里说的数据组,并不包括表头,也就是每一列最上面的那个标题,但是要导入的数据组文件里,必须包含表头。举个例子

姓名 年龄 小明 20 小华 30

那个小明这一行,也就是小明+20这两个数据,就被称为”数据组1”,小华这一行,就被称为”数据组2”,一定要明白这个概念,因为有很多报错都会提到”数据组XX”,根据XX的值,我们可以很快找到是哪一行出了问题。

这个数据组文件,或者说这个表格里有三行,但是只有两个数据组,说白了就像数据库的两条记录,所以说,表头不算数据组,但是表头包含在数据组文件里。

当然了,姓名和年龄(可以叫做字段值,或者列标题,或者表头)这一行,不一定是表格的第一行,在Excel中,可以把这三行作为一个整体随意安放,在PS里,小明+20这两个数据,仍然是数据组1。但是PS里定义了几个数据,就要有多少列,既不能多,也不能少,否则提示文本文件第一行中变里名称过多/不足。

过程:

首先要制作一个数据组文件,数据组文件说白了是一个表格,这个表格只能用两种格式,一是CSV,二是TXT(ANSI编码)。推荐用CSV格式的表格,表格的第一行要有表头(表头是表格的列标题也就是每一列的字段名,比如说姓名、年龄等),表头下面就是对应的数据。

用PS打开一张图,建议直接去打开批处理的图片中的一张,或者是打开你的模版。需要注意的是,要进行替换的图层,一不能锁定,二不能是智能对象。然后给每个图层起一个方便方便区别的名字,比如姓名、年龄、照片等。

打开菜单 图像>变量>定义,我们在弹出的窗口中选择要替换的图层后(假设要替换的是文本图层),打开文本替换,输入名称,这里输入的名称必须要和你表格中的表头名称对应;对所有要替换的图层进行定义后,通过对话框右边的上一个或者下一个按钮(都可以)切换到数据组对话框。

点击导入按钮,通过选择文件,导入我们已经制作好的CSV表格,注意,选择文件的时候,需要在选择窗口右下角手动限定格式为CSV,默认是TXT会导致看不见CSV文件。导入后点击确定,我们会发现我们的数据已经全部到了数据组中。

将第一列用作数据组名称:把第一列某行的值,作为该条数据组在PS里的名称,PS里切换数据组的时候能看到名称。如果不勾选这个,PS的命名就是数据组1、数据组2……所以建议勾选,并把姓名之类的有区分度的数据放到第一列,方便区分。注意,如果第一列数据相同,那么只有第一个数据组是列里的数据,后面的命名从数据组2开始变成默认名字,不清楚这是个bug还是feature。

替换现有的数据组:勾选的话,数据组只有本次导入的数据,是抹除原有的,替换成现有的。如果不勾选,就是追加模式,只会将新的数据组文件追加到里面,不会删除原有的数据组。

打开菜单 文件>导出>数据组作为文件;在弹出的对话框中选择被处理后的图像的保存位置。记得修改文件命名,让它每个文件都加一个编号,不然可能新生成的文件和之前生成的文件是同一个名字,从而覆盖掉之前的文件,最后只得到一个文件那就不好了。

数据组导出只能是PSD格式,得到PSD格式后,可以用文件-脚本-图像处理器,批量转为JPG格式。

注意: 变量不能是背景图层(即不能锁定),也不能是智能对象。

定义过变量的图层,在对话框里,图层后面会带有一个星号*,表示该图层已经定义过变量。变量类型有三种,分别是可见性、文本替、 像素替换。每个图层都可以设置可见性变量,用来决定这个图层是否可见;文本替换不用多说,只有文字图层才有这种变量类型;像素替换针对的则是普通图片图层和形状图层;调整图层的话亦可以定义为变量,但是变量类型里面只有可见性能用。

变量类型下要输入的名称,一定要输入数据组文件里对应的列标题,无论中英文,只要对应一样就可以。文本替换默认的名称/列标题是(文本变量1),像素替换默认的名称/列标题是(像素变量1),如果表格非常简单,那可以直接用PS默认的名称来给表格列标题命名,这样子在PS里就不用改了,不过这样子,表格就不够直观科学了,所以不推荐这么做。

可见性变量可以控制对应的图层是否可见,用法和文本替换/像素替换的区别在于,在表格里面,列标题要与可见性名称对应,列的值,想要可见的话要写True,不可见的话要写False,不用区分大小写,不可以用1和0代替。可以多个图层用同一列可见性值,也可以每个图层对应一列可见性值。

数据组导入成功后就可以预览结果了,勾选面板右边的“预览”,然后在“数据组”下拉列表中选择一个数据组即可在PS工作区预览该数据的结果图像,除了用下拉列表挑选,也可以点击旁边的左右切换按钮。

点面板右边的应用,即可将选中的数据组应用到当前打开的文件,说白了就是用数据组文件里面的值来替换现在的变量图层,而不需要你手动去输入,但是这时候并没有自动保存文件,关闭对话框后,还可以撤销。如果你不点击应用,关闭对话框后,预览内容,或者说被替换的变量就会恢复到原始状态。

左右切换按钮右边的按钮是 基于当前数据组创建新的数据组,这个也很简单,可以看到对话框下面是有显示变量内容的,也就是表格中的数据,你可以修改这个数据,然后点击按钮,PS就会自动填加一行数据组,数据组的内容就是你刚刚修改的内容。

有新建数据组(说白了就是新建一条记录),就有删除当前数据组,最右边那个垃圾桶图标就是删除按钮,当然需要知道,他删除的只是左边选中的这一行或者说这一个数据组,而不是所有的数据组。

预览和应用也可在菜单 图像>应用数据组 里面进行,不过感觉这个菜单有些多此一举,毕竟在数据组对话框里就能切换预览了,这个应用数据组的好处在于界面更加直观,所以倒也不算完全多余。

下面更加详细的解说:

所谓数据组,说白了就是个表格,PS只支持CSV格式和TXT格式的表格,在数据组对话框导入数据组文件的时候,默认只显示TXT格式,需要手动在右下角的格式限制里切换成CSV,才可以显示并导入CSV文件。

导入CSV的时候,一定要先关闭Excel或者其他的CSV编辑器,否则会提示:无法完成请求,因为该文件已经在使用或已被其他应用程序打开。导入TXT就没这个问题,即便打开了TXT,也不会这么提示。不过还是建议用CSV格式的表格,一是CSV表格的形式更加直观,可以随意改变列宽,二是不用考虑制表符的问题,因为每一列的分隔线就意味着制表符,三是用Excel修改数据更加方便。

CSV格式下,要替换的值可以有中文或者英文模式下的逗号,引号。网上很多教程都说不可以有英文逗号和英文引号,这是针对的TXT格式,在CSV格式下,它会对英文逗号和引号再加一个英文引号来转义,所以不用管英文的逗号和引号问题,但是如果要手写TXT的话,必须用英文引号对英文逗号和英文引号进行转义完整的值。例如CSV里输入【蓝,色】没问题,但是在TXT里就要输入【”蓝,色”】,否则会报错。如果TXT文件不是手动输入,而是由CSV文件另存出来的,就不用管了,因为excel会自动添加转义字符。

对于要替换的图片,路径值后面也可以随意加空格,PS导入图片的时候会自动忽略路径末尾的空格。

如果是TXT文档,则列与列之间,不可以用空格分隔,必须得是制表符Tab,两个制表符中间的数据可以随意加空格,只会被当作一个数据。如果不是制表符,而只有空格的话,就相当于只有一列,PS无法区分,所以会报错:无法将文件内容作为数据组解析。数据组”XX”不完整。

TXT最后一列的后面不能再出现制表符,否则会提示:无法将文件内容作为数据组解析。数据组”XX”所列值过多。这个问题很好理解,比如说我做了两列数据,第一列是文本,第二列是图片,然后我在第九行数据后面加了个制表符,相当于这一行又加了一列,但是PS里只定义了两个变量,而且其他行里都没有第三列数据,所以报错。

不管是CSV还是TXT,定义了几个变量,就要有几列数据,既不能多也不能少。(这个说法其实不严谨,因为图层可见性变量,可以多个图层都对应一列可见性的值,为了方便理解,所以我们这里说有几个变量就要有几列数据),不然一定会报错。如果列数多了,会提示:文本文件第一行中变量名称过多。如果列数少了,会提示:文本文件第一行中变量名称不足。表中不可以有空行,也不可以有空列。

每一行每一列,也就是整个数据表范围内都得有数据,不可以删掉某个单元格内容,总之就是不能有空的地方,否则会提示:无法将文件内容作为数据组解析。数据组”XX”不完整。也不可以用空格代替空的地方,否则会提示:无法完成请求,因为程序错误。(不过文字里面加空格是可以的,只是说不能全都是空格)

不管是TXT还是CSV,都不要求必须从第一行开始写这个表格,也就是说,表格外的换行符没什么影响,CSV表格中,完全可以任选一个位置放置数据表,当然,表内,也就是数据内部,是绝对不能出现空格或者空行的,即数据表必须是一个完整的整体。

网络谣传说什么数据组文件里表头只能用英文,数据组文件名字不能用中文,这些都是胡说八道。网上说TXT格式的数据组文件最好用ANSI编码存储倒是科学的,不过系统默认的就是这种编码,所以也不用去管,如果不是ANSI,可以打开TXT后另存为TXT,可以选成ANSI编码。

用数据组变量导出来的PSD文件,用2345看图王,经常会打不开,原因莫名,但是用I See图片管理器或者其他PSD查看软件都可以打开。

像素替换变量

像素替换变量一般是用一个外部图像替换,数据组文件里的变量值应该是要替换的图像的相对路径或绝对路径,假如图像与数据组文件保存在同一目录下,我们可以使用相对路径(不是说数据组文件在图像文件夹里面,而是平级)。

例如,图像存在(批量生成)文件夹里一个名为(照片)的文件夹中,而数据组文件“1111.CSV”也存放在(批量生成)文件夹里。即它们存放在同一目录下,所以我们使用图像的相对路径即可。

当然了,数据组文件也可以放在图像所在的文件夹里,同样可以使用相对路径,这样更加简单直观,只是不知道,为什么网上的教程一定要强调必须是平级目录。

像素替换下面还有三个子选项,分别是方法、对齐方式、是否剪切到定界框。这三个选项,是替换尺寸不一的图片的利器。再讲这个之前,说一下定界框的含义,所谓定界框,说白了就是要替换的图层的四周围成的框,它的意义就是该图层图像的大小尺寸。

先来简单解释 方法 的四个选项。

限制:保留要被处理图像的比例,保留要被处理的图像的所有内容。

填充:保留要被处理图像的比例,保留单个维度方向上的内容,另一个维度方向上内容可能不保留。

保持原样:保留要被处理图像的比例,保留要被处理图像的尺寸和分辨率,其他之外都不保证。

一致:不保留要被处理图像的比例,保留要被处理图像的所有内容。

不管是哪种方法,最后得到的PSD文件,比例和(显示的)大小一定不会超过原先的变量图层。

然后来详细解释 方法 的四个选项。

限制:PS的解释是:调整图像大小以在保留比例的同时将图像限制在定界框内。说白了就是,让被批处理的图完整的呈现在第一张图的范围内,配合对齐方式,可以让图片处于第一张图范围内的下方或者其他位置(九宫格位置,可以九选一)。

填充:如果要被处理的图小,则让被处理的图在保持比例的同时放大,直到其宽度或者高度都大于等于第一张图时,停止放大。如果要被处理的图大于第一张图,则让被处理的图在保持比例的同时缩小,直到其宽度或高度等于第一张图时,停止缩小。填充这种方法,可以保证定界框内不会出现透明像素,也可以保证要被处理的图像比例不变化,但当要被处理的图像比例和第一张图比例不同时,必然会有部分像素被裁掉。

保持原样:直接将要被处理的图像放到定界框上(并不是缩放到定界框内部),既不放大也不缩小,保持比例,保持原图的尺寸和分辨率,相当于直接把原图给拉了过来,但是定界框外的内容,如果合并图层的话,就相当于被删掉了。

一致:调整要被处理的图像大小、尺寸、比例和定界框一样,会拉伸要被处理的图像,可以保留要被处理的图像的所有内容。(不可以剪切到定界框,因为图像处理后压根不会超出定界框,不可以用对齐方式,因为图像处理后的大小和位置和定界框一模一样)

像素替换下面的三个子选项,方法 大致就是上面所讲的那样、是否剪切到定界框也很好理解,对齐方式更容易明白。

剪切到定界框:这个功能就是把导出的PSD中,定界框外的内容全部裁剪掉,我们知道,数据组导出的是PSD格式,如果方法选择填充或者保持原样,并且不勾选剪切到定界框,打开处理后的PSD文件,可以发现,还可以通过移动图层找回来定界框外的内容。剪切到定界框选项只能在填充、保持原样两种方法下,才能使用,因为只有这两种方法,被处理的图像才有可能会超过定界框。

文字替换没有方法和对齐方式的子选项,也就是说,文字图层是固定的,但是有个小窍门,可以保证文字图层是居中的,这个方法和做批处理动作时,保证图层居中的方法是一样的,说白了就是,先调出来标尺,然后把标尺的尺度改成百分比,然后把文字图层拉到图片中间,这样子就实现了文字图层居中,或者说实现了按照比例放置。

对齐方式是个九宫格位置,方法选择 一致 的时候,不能选择对齐方式,这个功能还是挺实用的,毕竟文字图层的位置不方便调整,只能让图片去适应文字的位置,然后通过菜单 图像-裁剪-基于透明像素,结合批处理动作,应付不同尺寸和比例的图片,后面有给文字图层加文件名水印的示例来解释这种用法。

将数据组作为文件导出:

选择文件夹,选择的是文件将要被保存到的地方。

文件命名里面一定要加一个编号,不然可能最后就剩下一个文件,之前的文件全被覆盖了。

文件扩展名可以选两个,PSD和psd,只是大小写的区别,实际上就PSD一种格式。配合动作,PSD转成PNG可以用文件-自动-批处理,转成jpg的话还可以用文件-脚本-图像处理器

最底下的兼容性,其实指的是保存时的文件名的兼容性,因为我们知道,Windows、Mac OS、Linux对文件名的要求限制不大一样,建议是全部勾选,这样子可以保证导出的文件名在这三种系统下都没问题。

一个实例:给1000张不同的图片添加其对应的文件名水印。

如果是尺寸相同,添加水印位置也相同的图片,用PS的变量数据组功能很简单就能完成。如果图片尺寸和比例不同,那直接用PS有点困难,当然,也不是不能做,只是太麻烦,做的话,要注意两点,一是像素变量下面的对齐选项和方法,二是动作批处理裁减掉透明像素,后面会详细讲。

面对这种复杂的情况,PS处理起来真的很费力,建议用 I see这个看图软件,里面有添加文字功能,可以将文件名作为水印批量处理,而且最重要的是,可以根据图片尺寸和添加文字的比例来确定文字的位置和大小,相当方便快捷。如果文件名字需要批量更改的话,可以结合Renamer批量重命名程序来完成。

如果非要用PS的话,第一个要解决的问题就是获取图像的路径和图像的文件名。

最先想到的就是利用CMD命令,先打开命令提示符,或者Win+R,输入CMD,确定,然后输入CD (注意,CD后面还有一个空格),接着把存放图片的文件夹拖入到CD后面,就会自动填入路径,然后回车确定。

接着输入【dir /s/b>数据组文件.csv && dir /b >>数据组文件.csv】 就可以在图片文件夹里面生成一个CSV文件(不要输入中括号,只输入中括号里面的内容)。

打开CSV表格,可以看到上面是图片路径,下面是图片名字,把下面的图片名字放到图片路径右侧那列,稍作整理,添加个表头,例如,路径这一栏,表头可以写 像素变量1,文件名这一列,表头可以写 文本变量1。

补充:最简单的办法是 选中文件,然后文件管理器选项卡里有个复制路径,然后到excel里面粘贴。

不想用CMD命令的话,可以使用第三方软件,推荐 renamer这个批量重命名软件,既可以批量处理下文件名,也可以导出名字和路径,手动复制到CSV表格中(不过要分开导出,如果用导出所有列功能的话,导出的中文大概率会乱码),当然了,文件目录打印软件有很多,随便一搜多的是。

还可以用Excel来完成, 1、首先我们打开excel,点击“公式”选项卡,单击“定义名称”按钮。 2、在“名称”框中,输入名称“文件名”,在“引用位置”中输入 =FILES(“D:\图像文件夹*.“),单击“确定”。引号内是图像所在文件夹的绝对路径,后面的.*必须要保留。 3、接着,在A2单元格输入“=INDEX(路径,ROW(A2))”,回车。 4、鼠标放在A2单元格右下角的填充柄上,按住鼠标左键向下拖动,直到出现“#REF!”,就说明完成了!

注意:这种方法只是提取了D:\图像文件夹 中包含的文件的名称,并未提取里面所包含的子文件夹以及子文件夹内的文件名称。

至于文件的路径,也可以用Excel来完成,但是比较麻烦,所以我们直接用一个更简单的办法来完成,就是用&&来合并字符,既然得到了文件名,只要在其前面加上个共同的路径就行了。

说到Excel,还可以用它的插件,方方格子来实现,在工作表选项卡里选择文件目录命令。总之,想要实现这个目的,有很多方法,如果学过编程的话更好,因为获取文件名和路径,基本各种编程语言都会放在基础教程里来讲。

通过上面这一步,我们成功建立了数据组文件。后面, 就是用PS变量数据组功能了,有一点需要注意的是,第一张图尽量选尺寸最大的那张图,像素变量的方法要用限制,尽量是比例差不多的图放在一个文件夹下批量处理,不同比例的图片,分开处理最好。时间紧迫,此处不再多讲,不过还是建议用 I see 图片管理软件来完成,方便简单又迅速。

另外:已经做好数据组变量的PSD文件是不会自动更新的,比如说我做好了一个带数据变量的PSD文件,然后我把CSV文件里面的数据做了更改,这时PSD里的内容并不会更改,重新打开也不会,他不是excel的那种数据链接可以跟随着变化,必须重新导入新的CSV才可以。