<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        怎樣編寫一個Photoshop濾鏡--ScriptingPlug-ins

        來源:懂視網 責編:小采 時間:2020-11-27 14:50:53
        文檔

        怎樣編寫一個Photoshop濾鏡--ScriptingPlug-ins

        怎樣編寫一個Photoshop濾鏡--ScriptingPlug-ins:在第一篇文章中我們建立了一個沒有UI的基本濾鏡框架,并且引入PIPL資源使之能被PS加載到菜單。在第二篇文章中我們又引入了濾鏡參數和相應的對話框資源,并且講解了對話框在濾鏡調用流程中的顯示時機。這一篇文章我們將使濾鏡支持動作記錄和回放,也就是通過添
        推薦度:
        導讀怎樣編寫一個Photoshop濾鏡--ScriptingPlug-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資源需要的定義:

        //定義 Scripting Keys
        #define KEY_FILLCOLOR 'fiCo'
        #define KEY_OPACITY 'opcA'
        
        #define plugInSuiteID 'filR'
        #define plugInClassID 'filR'
        #define plugInEventID 'filR'
        #define plugInUniqueID "18EC4E8F-DB34-4aff-AF99-77C8013BD74F"
        #define plugInAETEComment "FillRed example filter By hoodlum1980"
        #define vendorName "hoodlum1980"



        Code highlighting produced by Actipro CodeHighlighter (freeware)
        http://www.gxlcms.com/

        -->//定義 Scripting Keys
        #define KEY_FILLCOLOR 'fiCo'
        #define KEY_OPACITY 'opcA'

        #define plugInSuiteID 'filR'
        #define plugInClassID 'filR'
        #define plugInEventID 'filR'
        #define plugInUniqueID "18EC4E8F-DB34-4aff-AF99-77C8013BD74F"
        #define plugInAETEComment "FillRed example filter By hoodlum1980"
        #define vendorName "hoodlum1980"

        上面我們把我們的濾鏡,濾鏡的參數都定義為了鍵,關于鍵定義,需要符合以下原則:

        (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 文件,內容如下:

        // ADOBE SYSTEMS INCORPORATED
        // Copyright 1993 - 2002 Adobe Systems Incorporated
        // All Rights Reserved
        //
        // NOTICE: Adobe permits you to use, modify, and distribute this 
        // file in accordance with the terms of the Adobe license agreement
        // accompanying it. If you have received this file from a source
        // other than Adobe, then your use, modification, or distribution
        // of it requires the prior written permission of Adobe.
        //-------------------------------------------------------------------------------
        #define plugInName "FillRed Filter"
        #define plugInCopyrightYear "2009"
        #define plugInDescription 
         "FillRed Filter.
        	 - http:\www.cnblogs.comhoodlum1980"
        
        #include "E:CodesAdobe Photoshop CS2 SDKsamplecodecommonincludesPIDefines.h"
        
        #ifdef __PIMac__
         #include "Types.r"
         #include "SysTypes.r"
         #include "PIGeneral.r"
         #include "PIUtilities.r"
         #include "DialogUtilities.r"
         #include "CommonDefine.h" /* 包含了術語定義 */
        #elif defined(__PIWin__)
         #define Rez
         #include "PIGeneral.h"
         #include "E:CodesAdobe Photoshop CS2 SDKsamplecodecommon
        esourcesPIUtilities.r"
         #include "E:CodesAdobe Photoshop CS2 SDKsamplecodecommon
        esourcesWinDialogUtils.r"
         #include "CommonDefine.h" /* 包含了術語定義 */
        #endif
        
        #include "PITerminology.h"
        #include "PIActions.h" /* 包含對 NO_REPLY 的定義 */
        
        resource 'PiPL' ( 16000, "FillRed", purgeable )
        {
         {
         Kind { Filter },
         Name { plugInName },
         Category { "Demo By hoodlum1980" },
         Version { (latestFilterVersion << 16) | latestFilterSubVersion },
         #ifdef __PIWin__
         CodeWin32X86 { "PluginMain" },
         #else
         CodeMachOPowerPC { 0, 0, "PluginMain" },
         #endif
        
         SupportedModes
         {
         noBitmap, doesSupportGrayScale,
         noIndexedColor, doesSupportRGBColor,
         doesSupportCMYKColor, doesSupportHSLColor,
         doesSupportHSBColor, doesSupportMultichannel,
         doesSupportDuotone, doesSupportLABColor
         },
         
         HasTerminology
         {
         plugInClassID,
         plugInEventID,
         16000, /* int16 aeteResNum; number of 'aete' resource */
         plugInUniqueID
         },
         
         EnableInfo
         {
         "in (PSHOP_ImageMode, RGBMode,"
         "CMYKMode, HSLMode, HSBMode, "
         "DuotoneMode, LabMode)"
         },
        
         PlugInMaxSize { 2000000, 2000000 },
        
         FilterCaseInfo {
         { /* array: 7 elements */
         /* Flat data, no selection */
         inStraightData,
         outStraightData,
         doNotWriteOutsideSelection,
         doesNotFilterLayerMasks,
         doesNotWorkWithBlankData,
         copySourceToDestination,
         /* Flat data with selection */
         inStraightData,
         outStraightData,
         doNotWriteOutsideSelection,
         doesNotFilterLayerMasks,
         doesNotWorkWithBlankData,
         copySourceToDestination,
         /* Floating selection */
         inStraightData,
         outStraightData,
         doNotWriteOutsideSelection,
         doesNotFilterLayerMasks,
         doesNotWorkWithBlankData,
         copySourceToDestination,
         /* Editable transparency, no selection */
         inStraightData,
         outStraightData,
         doNotWriteOutsideSelection,
         doesNotFilterLayerMasks,
         doesNotWorkWithBlankData,
         copySourceToDestination,
         /* Editable transparency, with selection */
         inStraightData,
         outStraightData,
         doNotWriteOutsideSelection,
         doesNotFilterLayerMasks,
         doesNotWorkWithBlankData,
         copySourceToDestination,
         /* Preserved transparency, no selection */
         inStraightData,
         outStraightData,
         doNotWriteOutsideSelection,
         doesNotFilterLayerMasks,
         doesNotWorkWithBlankData,
         copySourceToDestination,
         /* Preserved transparency, with selection */
         inStraightData,
         outStraightData,
         doNotWriteOutsideSelection,
         doesNotFilterLayerMasks,
         doesNotWorkWithBlankData,
         copySourceToDestination
         }
         }
         }
        };
        
        
        resource 'aete' (16000, "FillRed dictionary", purgeable)
        {
         1, 0, english, roman, /* aete version and language specifiers */
         {
         vendorName, /* vendor suite name */
         "FillRed Demo By hoodlum1980", /* optional description */
         plugInSuiteID, /* suite ID */
         1, /* suite code, must be 1 */
         1, /* suite level, must be 1 */
         { /* structure for filters */
         plugInName, /* unique filter name */
         plugInAETEComment, /* optional description */
         plugInClassID, /* class ID, must be unique or Suite ID */
         plugInEventID, /* event ID, must be unique to class ID */
         
         NO_REPLY, /* never a reply */
         IMAGE_DIRECT_PARAMETER, /* direct parameter, used by Photoshop */
         { /* parameters here, if any */
         "FillColor", /* parameter name */
         KEY_FILLCOLOR, /* parameter key ID */
         typeInteger, /* parameter type ID */
         "Fill color in RGB", /* optional description */
         flagsSingleParameter, /* parameter flags */
         
         "Opacity", /* optional parameter */
         KEY_OPACITY, /* key ID */
         typeInteger, /* type */
         "opacity in RGB", /* optional desc */
         flagsSingleParameter /* parameter flags */
         }
         },
         { /* non-filter plug-in class here */
         },
         { /* comparison ops (not supported) */
         },
         { /* any enumerations */
         }
         }
        };

        在上面的文件中,我們可以看到我們的濾鏡含有的兩個主要參數:填充顏色 和 不透明度。位于 IMAGE_DIRECT_PARAMETER 結構中,typeInteger 指明它們是整數類型。flagsSingleParameter指明它們是基本類型(具有單一值)。此外,還可以把參數定義為枚舉類型,同時把枚舉的值域定義放在最后一節中,這里我們對此不做介紹了。

        怎樣編寫一個Photoshop濾鏡-- Scripting Plug-ins

        濾鏡被重新編譯后,我們在PS中對它錄制一個動作,命名為“測試 FillRed”,錄制完成后,可以看到在動作面板上的左側,出現了對話框選項的CheckBox,我們可以設置播放時是否彈出對話框。我們把FillRed濾鏡命令的下拉列表展開可以看到濾鏡參數:

        FillColor: 10

        Opacity:90

        請注意參數的名字就是來自于上面的aete資源中的定義的濾鏡參數名字屬性,這就是我們需要給它定義一個可讀的參數名的原因。需要注意的是,由于我們把對話框上三個參數合成為了一個參數,這就使得上面的參數顯示是三個參數的合成值(10進制)。因此這里為了看清楚,我就只設置了 R 和 O1,其他參數都為0,這樣我們在動作面板看到的參數值就和濾鏡的對話框上的參數值是一致的。否則我們看到的將是三個參數合成后的值。

        更多怎樣編寫一個Photoshop濾鏡-- Scripting Plug-ins相關文章請關注PHP中文網!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        怎樣編寫一個Photoshop濾鏡--ScriptingPlug-ins

        怎樣編寫一個Photoshop濾鏡--ScriptingPlug-ins:在第一篇文章中我們建立了一個沒有UI的基本濾鏡框架,并且引入PIPL資源使之能被PS加載到菜單。在第二篇文章中我們又引入了濾鏡參數和相應的對話框資源,并且講解了對話框在濾鏡調用流程中的顯示時機。這一篇文章我們將使濾鏡支持動作記錄和回放,也就是通過添
        推薦度:
        標簽: ps Photoshop ins
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩插啊免费视频在线观看 | 久久久久久久免费视频| 国产亚洲av片在线观看播放 | 无码高潮少妇毛多水多水免费| 久久亚洲日韩精品一区二区三区| 国产一区二区免费| 亚洲av日韩av激情亚洲| 无码国产精品一区二区免费16 | 亚洲AV一宅男色影视| 91精品导航在线网址免费| 久久久久亚洲精品日久生情| 国产在线观看麻豆91精品免费| 国产日本亚洲一区二区三区| 免费看又爽又黄禁片视频1000| 久久亚洲AV成人无码国产最大| 亚洲色偷偷狠狠综合网| 爱丫爱丫影院在线观看免费| 亚洲欧洲国产精品你懂的| 97视频热人人精品免费| 精品一区二区三区无码免费视频| 成人午夜亚洲精品无码网站| 鲁丝片一区二区三区免费| 久久精品国产亚洲AV电影| 一本无码人妻在中文字幕免费 | 亚洲宅男天堂a在线| 日本特黄特黄刺激大片免费| 久青草国产免费观看| 日木av无码专区亚洲av毛片| 成年午夜视频免费观看视频 | 国产乱弄免费视频| 国内精品99亚洲免费高清| 久久丫精品国产亚洲av| 四虎影院免费视频| 久久久久久国产a免费观看不卡| 67pao强力打造67194在线午夜亚洲| 一本无码人妻在中文字幕免费| 黄网站在线播放视频免费观看| 亚洲成年人在线观看| 免费又黄又硬又爽大片| 久久国产乱子伦免费精品| 国产精品亚洲综合|