怎样编写一个Photoshop滤镜(3)-- Scripting Plug-ins

简介: 在第一篇文章中我们建立了一个没有UI的基本滤镜框架,并且引入PIPL资源使之能被PS加载到菜单。在第二篇文章中我们又引入了滤镜参数和相应的对话框资源,并且讲解了对话框在滤镜调用流程中的显示时机。

            在第一篇文章中我们建立了一个没有UI的基本滤镜框架,并且引入PIPL资源使之能被PS加载到菜单。在第二篇文章中我们又引入了滤镜参数和相应的对话框资源,并且讲解了对话框在滤镜调用流程中的显示时机。这一篇文章我们将使滤镜支持动作记录和回放,也就是通过添加“术语资源”,使我们的滤镜参数被PS的脚本系统所获知(scripting-aware),并能够记录和回放。

            从Photoshop 4.0开始引入了一个新的面板以及相应的命令和回调函数:动作面板(浮动窗口),以及Descriptor 回调函数集。动作面板是Photoshop脚本系统用于和用户交互的接口,也是其核心所在。Photoshop 5.0扩展了动作结构,使自动化插件能够支持可描述的Photoshop命令。(《Photoshop API Guide》第11章)

            关于PS的 Scripting System,其来源是 PS 对苹果系统的事件和脚本机制的继承和支持,PS 的开发同时针对两种操作系统平台。这里我们介绍如何使我们的滤镜被PS脚本系统接纳。

 

            首先我们需要在 r文件中增加术语资源(terminology resource)。因此首先在 pipl 资源中增加一个 HasTerminology 结构,其定义如下:

 

// 这个属性指明滤镜是否提供了 'aete'资源。
typedef  struct  HasTerminology
{
int32 classID; 
//  classID from 'aete'
int32 eventID;  //  eventID from 'aete' or NULL if none
int16 aeteResNum;  //  number of 'aete' resource
CString uniqueID;  //  unique ID string (UUID or your own ™/©). If present,
ignores AppleScript and keeps local to Photoshop.
} HasTerminology;

 

            这个结构将被增加到 r文件的 pipl资源内。下面我们在pipl资源后面添加了 aete 资源。

            在此前我们在一个通用的头文件中添加一些aete资源需要的定义:

Code_CommonDefine.h

 

            上面我们把我们的滤镜,滤镜的参数都定义为了键,关于键定义,需要符合以下原则:

            (a)它必须由4个字符组成。不够4个字符可以结尾用空格补足。

            (b)用户定义的键名应该以小写字母开头,同时至少含有一个大写字母。(因为全大写,全小写键名属于Apple定义)。

            滤镜的唯一标识符采用VC工具生成的GUID即可。

            

            然后我们对r文件增加aete 资源,aete 资源模板如下:

 

resource  ' aete '  ( 0 )
{ 
//  aete version and language specifiers
{  /*  suite descriptor  */
{ 
/*  filter/selection/color picker descriptor  */
{ 
/*  any parameters  */
/   *  additional parameters  */
}
},
{ 
/*  import/export/format descriptors  */
{ 
/*  properties. First property defines inheritance.  */
/*  any properties  */
},
{ 
/*  elements. Not supported for plug-ins.  */
},
/*  class descriptions for other classes used as parameters or properties  */
},
{ 
/*  comparison ops. Not currently supported.  */
},
{ 
/*  any enumerations  */
{
/*  additional values for enumeration  */
},
/*  any additional enumerations  */
/*  variant types are a special enumeration:  */
{
/*  additional types for variant  */
},
/*  any additional variants  */
/*  class and reference types are a special enumeration:  */
{
},
/*  any additional class or reference types  */
}
}
}

 

            请注意的是这是一个针对PS插件的aete资源模板,也就是说它不仅仅针对滤镜,也包括其他种类的PS插件。关于其具体含义这里我们不做详细讨论,可以参考相关PS SDK文档。

            【注意】即使有的节不需要,也必须提供一个空的花括号占位,而不能有缺失。 

            下面我们给出添加了aete资源后的 FillRed.r 文件,内容如下:

FillRed.r

 

            在上面的文件中,我们可以看到我们的滤镜含有的两个主要参数:填充颜色 和 不透明度。位于 IMAGE_DIRECT_PARAMETER 结构中,typeInteger 指明它们是整数类型。flagsSingleParameter指明它们是基本类型(具有单一值)。此外,还可以把参数定义为枚举类型,同时把枚举的值域定义放在最后一节中,这里我们对此不做介绍了。

 

                  

                  滤镜被重新编译后,我们在PS中对它录制一个动作,命名为“测试 FillRed”,录制完成后,可以看到在动作面板上的左侧,出现了对话框选项的CheckBox,我们可以设置播放时是否弹出对话框。我们把FillRed滤镜命令的下拉列表展开可以看到滤镜参数:

                  FillColor: 10

                  Opacity:90

                  请注意参数的名字就是来自于上面的aete资源中的定义的滤镜参数名字属性,这就是我们需要给它定义一个可读的参数名的原因。需要注意的是,由于我们把对话框上三个参数合成为了一个参数,这就使得上面的参数显示是三个参数的合成值(10进制)。因此这里为了看清楚,我就只设置了 R 和 O1,其他参数都为0,这样我们在动作面板看到的参数值就和滤镜的对话框上的参数值是一致的。否则我们看到的将是三个参数合成后的值。

 

                  最后,是滤镜的源代码下载链接:

                  http://files.cnblogs.com/hoodlum1980/FillRed.rar

 

                  我的相关文章:

                  《怎样编写一个Photoshop滤镜(1)》

                  《怎样编写一个Photoshop滤镜(2)》

目录
相关文章
|
存储 人工智能 运维
阿里巴巴浙江云计算仁和液冷数据中心获评5A级(设计)绿色数据中心
9月15日,阿里巴巴浙江云计算仁和液冷数据中心在ODCC(开放数据中心委员会,以下同)2020峰会上获得数据中心绿色等级5 A(设计类)认证,成为全国首座绿色等级达5A的液冷数据中心。该数据中心绿色分级评估由ODCC联合中国信通院、TGGC(绿色网格,以下同)发起。阿里巴巴获得此项认证是2020年ODCC颁发的唯一一个5A设计类认证,是ODCC与绿色网格自2013年联合开展数据中心绿色等级评估以来颁发的全国第三个设计类5A等级奖牌,也是阿里巴巴继千岛湖数据中心获评5A绿色数据中心(设计)后又一座获此顶级殊荣的数据中心,再次展现了阿里巴巴数据中心的绿色节能实力。
阿里巴巴浙江云计算仁和液冷数据中心获评5A级(设计)绿色数据中心
|
8月前
|
人工智能 缓存 知识图谱
互联网医院AI问诊系统架构设计:从智能分诊到在线诊疗的完整链路
本文详解互联网医院AI问诊系统落地实践:直击无效咨询多、分诊低效、医生负荷重等核心瓶颈,以微服务架构+AI独立部署为基座,覆盖智能分诊、结构化问诊、知识图谱+规则引擎、病历自动生成及高并发保障,实测降低医生工作量50%、提升分诊准确率至85%+。(239字)
|
3月前
|
机器学习/深度学习 监控 算法
27类餐厨垃圾4100张YOLO垃圾分类数据集分享
本数据集含4100张YOLO格式标注图,覆盖苹果核、鱼骨、蛋壳、米饭等27类真实餐厨垃圾,支持YOLOv5/v8等模型训练,适用于智能分类设备、厨余处理及智慧环卫场景,即下即用。
|
云安全 安全 关系型数据库
【阿里云安全小贴士】提升 RDS 安全性的三个关键动作,建议收藏!
数据是企业核心资产,使用RDS时需主动加强安全防护。
【阿里云安全小贴士】提升 RDS 安全性的三个关键动作,建议收藏!
|
6月前
|
人工智能 运维 安全
当前企业市场零代码系统怎么选
在数字化刚需下,零代码成中小企业破局关键:2024年市场规模达62.4亿元,年增26.3%。但73%企业困于IT不足、开发慢、成本高,且面临同质化选型难题。本文基于Gartner五维模型,对比四类平台,提供分场景(小微/中小/大型)选型策略,并以轻流为例验证AI+流程驱动的高效适配性,助力企业精准匹配、安全落地、降本增效。(239字)
|
机器学习/深度学习 传感器 算法
研究锂离子电池模型中的最佳性能和效率:对电池组配置、负载选择、放电倍率(C-rate)、容量和电量状态(SOC)的全面研究(Simulink仿真实现)
研究锂离子电池模型中的最佳性能和效率:对电池组配置、负载选择、放电倍率(C-rate)、容量和电量状态(SOC)的全面研究(Simulink仿真实现)
537 4
|
9月前
|
人工智能 监控 数据可视化
企业常用的BI工具有哪些?2026主流BI工具对比分析
本文盘点国内10款主流BI工具,从数据源支持、核心功能、部署模式等维度对比分析,重点解读瓴羊Quick BI、Tableau、Power BI等产品优势,结合企业选型常见问题,提供实战选型建议,助力数据驱动决策。
|
编解码 监控 数据安全/隐私保护
免root屏幕录制脚本, 免root手机录制脚本,屏幕连点器点击【autojs】
完整屏幕录制功能:支持自定义分辨率、帧率和比特率 悬浮窗控制界面:提供直观的操作按钮和状态显示
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
1106 7
MySQL事务日志-Undo Log工作原理分析
|
存储 分布式数据库 Apache
小米基于 Apache Paimon 的流式湖仓实践
小米基于 Apache Paimon 的流式湖仓实践
533 0
小米基于 Apache Paimon 的流式湖仓实践

热门文章

最新文章