用Filter Factory制作Photoshop滤镜 相信各位Photoshop爱好者一定都对滤镜非常感兴趣吧，那么你是否想过自己也来制作滤镜呢？下面向大家介绍一个能完成这一任务的最方便的利器——Filter Factory。 Filter Factory也是一个Adobe公司出品的Photoshop Plugin，包含在光盘版的Photoshop中一起发售，不过在默认状态下它并不会自动安装上去。 Filter Factory的工作原理并不复杂，你只需为各颜色通道定义一个表达式，即一个运算法则，用来作用在各像素上，Filter Factory便可为你完成余下的工作：把它编译成真正的*.8bf Plugin文件。Filter Factory还提供了用户可调节的滑块，图像预览窗口，真的很不错！
用Filter Factory制作的滤镜已经可以满足基本的需求了，在网上有很多很酷的滤镜都是用 Filter Factory做的。下面简单介绍一下Filter Factory（以下简称为FF）的基本用法。
把Ffactory.8bf文件拷到Photoshop的Plugins目录中后，启动Photoshop，新建一个RGB图像文件，再选择Filter＼Synthetic＼Filter Factory... 便进入FF的设计窗口了。
注意：必须把显示器的分辨率调到800×600小字符或更高的分辩率才能看到完整的FF窗口。
窗口左上的方框是预览窗口，它的右边从上到下共有8个滑块，编号从0 ~ 7，其中每两个滑块又分为一组，即“0”号和“1”号滑块组成Map0，以此类推。在窗口中间你可以看到三个方框， 前面分别写着R、G、B，方框内便是让你针对各基色输入表达式的地方。窗口的最下面有一排按钮，依次为Load（调出已制作好的滤镜原代码）、Save（保存当前编辑的滤镜原代码）、Make（将源代码编译成8bf滤镜文件）、Cancel（取消）和 OK（确认）。
在定义好表达式后，如果你不急于将它编译为真正的
Plugin文件，可将它按源代码存放，按Save保存便行了。源代码一样可以当作滤镜使用，但必须通过FF来调用。若按Make键编译成真正的Plugin文件后，Photoshop就可以直接使用它了。
在具体使用之前，我们还得说明一下FF的一些基本概念。
在FF中为R（红）、G（绿）、B（蓝）各通道定义表达式是有语法规则的，它也需要用到常量、变量、函数、运算符等等（在文章的末尾我们整理了一些运算符及常用函数列表)。在FF中，将一个图像中的每个像素都用坐标来进行定位，原点位于图像的左上角，横坐标即X轴，从左向右开始计数，纵坐标即Y轴，是从上向下开始计算的。在FF中通常用（x，y）来表示一个像素的位置，而像素的颜色和亮度则用（r, g, b）来表示，这里r, g, b是指各通道的值，大小在0～255之间。如一个（80，80，80）的像素代表的是一种暗灰，（255，255，255）是白色，（0，0，0）便是黑色了。
下面我们举一个最简单的例子:
R：r
G：g+100
B：b
从表达式上可以看出:R、B通道是不变的，而在G通道中对每个像素的“g”值都增加了100，其结果便是使整个图像都变绿了。
我们再举一个稍复杂一点的例子:
R：r+rnd(-ct1(1),ctl(1))
G：g+rnd(-ct1(1),ctl(1))
B：b+rnd(-ct1(1),ctl(1))
其中ctl（）函数用来获取滑块的取值，ctl（0）获取0号滑块的值，ctl（1）即获取1号滑块的值，以此类推。这样，用户便可通过拖动滑块来调节滤镜的效果了。而rnd（x，y）函数用来产生一个值在x和y之间的随机数。所以这段代码很明显是用来产生Noise（噪音）效果的，而且Noise的强度可以通过滑块来调节, 其中0号、1号和2号滑块分别控制着R、G和B通道的Noise 强度。
从以上例子可看出，FF的使用是很方便的。下面我们再研究一个实用滤镜的源代码，看看FF是如何工作的。在FF中附带有一个叫Lite Pegs的滤镜，它可将原图转化为许多小圆点，而小圆点的颜色和亮度随原图相应位置的颜色和亮度而变化。
我们一步一步来研究如何编写源代码。进入FF，将G和B设为零，只留R通道来试验下面的代码，便于在输入代码的同时观察预览窗口中的效果。
首先我们来画一个圆，一般地可以利用c2m（x，y）函数。
如代码：
c2m（x，y）<10？255:0
其中c2m（x，y）是表示距点（x，y）的范围。这里使用了一个条件判断语句:
表达式？值一:值二
即先判断表达式是否为真，若为真则采用值一，为假则用值二。在这里，便是将距原点（0，0）的距离小于10的像素赋为255，其它像素则赋为0，我们可以看到在原点处会生成一个半径为9个像素的圆，当然我们只能看到它的四分之一。
我们可以调节圆的大小和位置，如c2m（x-15，y-30）<20?255:0便是一个圆心位于（15，30）半径为19的圆。甚至还可以完全通过控制滑块来自己掌握 ：c2m（x-ctl（1），y-ctl（2））<ctl（0）？255：0。
下面的问题是如何画出一系列的横排和纵排的圆。首先我们来画一列竖线，可以这样:
abs（x%20-10）<=2?255:0
其中的abs是取绝对值函数，%是模运算符。使用了减10是用来调节第一道竖线的位置，大家可代用不同的值进去便可看到不同效果。这里第一道竖线横跨了X轴上第8、9、10、11、12个像素，也就是说竖线的宽度为5个像素。
这样圆点的效果相应的可以这样画:
c2m（x%20-10，y%20-10）<ctl (0)？255:0
这个滤镜的代码就基本完成了，不过我们需要把圆点的颜色和亮度设为圆心所在点的颜色和亮度，而非255，这样就需要对圆心像素进行取样，我们已知圆心坐标为（x-（x%20-10），y-(y%20-10）):
c2m（x%20-10，y%20-10）<ctl (0)？src（x-（x%20-10），y-（y%20-10），z）:0
这里用了src（x，y，z）函数来取样，x、y是指像素坐标，z是指通道R、G、B，但若不指明，就表示当前通道。
最后将这行代码分别写入RGB三个通道的框内，滤镜就完成了。
附一：运算符号
您可以在表达式中使用下列常用运算符号，这些符号以它们的运算优先级顺序列出，运算符优先级决定了表达示的运算顺序。

附二：函数
你可以在算术式中使用下面这些函数。需要注意的是许多函数在它们的定义域上可能会有限制，如果变量值超出范围，算术式会返回 0 。例如：ctl(8) 的运算结果是 0 ，这是因为 ctl 函数的定义域介于0和7之间。
函数 定义
src(x,y,z) x，y坐标上像素的z色频
rad(d,m,z) 来源影像的z色频值，与影像的中心 距离m,角度d
ctl(i) 滑钮i的数值，i是一个介于0与7之
间的整数
val(i,a,b) 滑钮i的数值，对应于a与b的范围之间
abs(a) a的绝对值
函数 定义
map(i,n) 色阶配对表格i的第n项值，i是介于
0与3之间的整数，n是介于0与255之
间的整数
min(a,b) a与b的较小数
max(a,b) a与b的较大数
add(a,b,c) a+b与c的较小值
sub(a,b,c) a-b与c的较大值
dif(a,b) a与b的差的绝对值
rnd(a,b) a与b之间的随机数字
mix(a,b,n,d) a与b套入分数 n/d，a*n/d+b*(d-
n)/d 的值
scl(a,il,ih, 从输入范围(il至ih)到输出范围(ol
ol,oh) 至oh)之a缩放
sqr(x) x的二次根号值
sin(x) x正弦，x是介于0与1024之间的整数,
cos(x) x余弦，x是介于0与1024之间的整数,
tan(x) x正切，x是介于0与1024之间的整数,
r2x(d,m) 像素的x，从任意中心点在角度d、单
位m的置换
r2y(d,m) 像素的y，从任意中心点在角度d、单
位m的置换
c2d(x,y ) 坐标(x,y)像素的角度置换
c2m(x,y) 坐标(x,y)像素的强度置换
get(i) 将目前储存值传回给i
put(v,i) 在储存格i中放入新值v
附三：在Internet上有许多关于FF的网站、免费代码及滤镜下载，下面列举一些，供大家学习参考:
http://www.afh.com/web/
http://www.hsv.tis.net/~puon/Photoshop
http://www.teleport.com/~pegasys/plgn.html
http://www.edesign.com/filters/
http://www.netins.net/showcase/wolf359/ffagalry.htm
http://privat.schlund.de/filter-factory
http://www.kt.rim.or.jp/~takinami
http://mars.ark.com/~gschorno/gfo/
http://www.asan.com/users/kangaroo/graphics.htm
http://intermedia.arts.ufl.edu/filters/filters.html
http://www.geocities.com/SoHo/Studios/4407/index2.html
http://www.primenet.com/~mock/soft02.html
http://www.mediaco.com/nvr/filters.html
http://www.arrowweb.com/pawel/pifs.html
http://www.fortunecity.com/lavendar/kane/39/
http://www.jwp.bc.ca/kamikaze/pspage.htm
http://www.websharx.com/~ttbrown/trufiltr.html
http://members.xoom.com/rambo/unplugged/index.html
http://www.partysan.de/visual/MAIN.HTM
http://privat.schlund.de/filter-factory
(王 巍）