Photoshop은 디지털 이미지 처리 분야에서 뛰어난 소프트웨어입니다. 동시에 제3자가 플러그인 형태로 기능을 확장할 수도 있습니다. Photoshop 플러그인은 현재 자동화(일괄 처리)('자동' 하위 메뉴에 표시됨), 색상 픽업, 가져오기, 내보내기('가져오기' '내보내기' 하위 메뉴에 표시됨), 확장, 확장 등 9가지 유형으로 나눌 수 있습니다. 필터, 파일 형식(열기, 다른 이름으로 저장 아래에 표시됨), 구문 분석(내보내기 기능 포함), 선택('선택' 메뉴 아래에 표시됨). 여기서는 사용자에게 가장 친숙한 필터를 예로 들어보겠습니다.
(1) 플러그인 일반 부분 소개:
플러그인의 메인 프로그램을 호출하여 호스트가 되는데, 대부분의 경우 Photoshop(이하 PS)입니다. 플러그인은 실제로 Windows 시스템 아래의 동적 링크 라이브러리입니다(확장자가 다를 뿐입니다). PS는 LoadLibray를 사용하여 플러그인 모듈을 로드합니다. 사용자가 해당 작업을 수행하면 플러그인 모듈에 대한 일련의 PS 호출이 발생합니다. 이러한 모든 호출은 동일한 진입점을 호출합니다. 진입점은 다음과 같이 정의된 함수입니다. (PS는 Windows 및 Mac과 호환되므로 여기서는 Windows 시스템에 대한 정의만 제공합니다.)
void ENTRYPOINT(
짧은 선택기) ,
void* PluginParamBlock,
long* PluginData,
short* result);
selector:
작업 유형 표시기. selector=0인 경우 모든 유형의 플러그인에 대해 동일한 의미를 갖습니다. 즉, 정보 대화 상자를 표시할지 묻는 것입니다. 다른 값은 플러그인 유형에 따라 다른 의미를 갖습니다.
pluginParamBlock:
이는 호스트와 플러그인 간에 정보와 데이터를 전송하는 데 사용되는 대규모 구조에 대한 포인터입니다. 플러그인 유형에 따라 구조가 다릅니다.
pluginData:
int32 유형에 대한 포인터입니다. 이는 PS가 플러그인에 대한 여러 호출을 통해 저장하는 값입니다. 표준 용도 중 하나는 플러그인이 저장을 위해 이 매개변수에 일부 전역 데이터 포인터를 전달할 수 있다는 것입니다.
result:
int16에 대한 포인터 플러그인이 실행될 때마다 결과를 설정해야 합니다. 호출됩니다. 0을 반환하면 플러그인 코드에 오류가 발생하지 않았음을 나타냅니다. 오류가 발생하면 이 값은 오류 코드를 반환합니다. 오류 코드와 관련하여 ps는 다양한 유형의 플러그인에 대해 오류 코드 범위를 나누고 SDK에서 일부 값을 미리 정의합니다.
대화 상자 정보:
모든 플러그인은 호출에 대해 응답해야 합니다. 플러그인은 사용자 정의 대화 상자를 표시할 수 있습니다. 단, 일관성을 유지하기 위해 다음과 같은 규칙을 준수해야 합니다.
(1) 메인 화면의 가로 중앙, 세로 높이의 1/3에 표시됩니다.
(2) 확인 버튼을 포함할 필요는 없지만, 어느 위치에서든 클릭하고 Enter 키를 누르면 응답합니다.
(2) 필터 플러그인 소개
필터 플러그인의 기능은 이미지의 선택된 영역을 수정하는 것입니다. 필터 동작은 채도 및 밝기 조정부터 이미지 필터링까지 다양합니다. Windows에서 필터의 확장자는 ".8BF"입니다.
다음 그림은 PS와 필터 플러그인 간의 호출 순서를 보여줍니다. 이것은 SDK 문서에 있는 그림입니다. 여기에 표시된 내용은 다음과 같습니다. 필터. 플러그인의 호출 순서입니다.
필터는 상단 호출 시작점인 필터 메뉴를 이용하여 호출할 수 있습니다. 한 번 호출하면 Photoshop에서는 필터 메뉴의 "마지막 필터" 하위 메뉴에 최신 필터 작업을 추가합니다. 앞으로 이 메뉴를 클릭하면 위 그림의 "마지막 필터 명령"에 해당됩니다. 아래에서는 위에서 보여드린 과정을 간략하게 소개하겠습니다. 먼저 필터 진입점 함수의 "템플릿"을 살펴보겠습니다.
플러그인 진입점 :PlugInMain
위 함수는 우리 필터의 가장 중요한 함수인데, 이 함수는 PS 호출을 위해 제공되기 때문에 이 함수가 Dll 내보내기 함수로 선언되어 있음을 알 수 있습니다. 호출 순서에서 볼 수 있듯이 이 메커니즘은 이 함수의 기능을 창의 창 프로시저와 매우 유사하게 만듭니다. 윈도우 프로시저는 MSG ID를 기준으로 메시지를 처리하는 데 사용되며, 이 기능은 주로 선택자를 기준으로 해당 작업을 수행하는 데 사용됩니다. 따라서 모두 스위치 케이스 분기 처리 구조를 포함합니다.
filterRecord
위 함수에 사용된 두 번째 매개변수는 about이 호출될 때 AboutRecord 구조에 대한 포인터입니다(예: selector=0). FilterRecord 구조는 매우 크고 복잡한 구조로, ps와 필터 간의 통신 및 데이터 전송을 위한 핵심 캐리어입니다. 크기는 452바이트이며, 총 7페이지로 구성됩니다. 이 구조의 구성원의 의미를 소개하는 데 사용되는 문서입니다. FilterRecord의 전체 정의는 SDK의 헤더 파일:pifilter.h에 있습니다. 아래에서는 언급된 가장 기본적이고 중요한 구성원 중 일부에 대해 설명하겠습니다.
(3) 호출 프로세스를 소개합니다.
(3.1) filterSelectorParameters 호출:
필터에 사용자가 설정해야 하는 매개변수가 있는 경우 해당 매개변수를 특정 위치에 저장해야 합니다. 그런 다음 주소를 세 번째 매개변수 데이터로 설정합니다. PS는 이 매개변수를 NULL로 초기화합니다. 이 호출이 발생하는지 여부는 사용자의 호출 방법에 따라 다릅니다. 필터가 방금 호출되면 필터는 필터의 가장 최근 명령 메뉴에 나타납니다. 사용자는 동일한 매개변수로 이 메뉴를 사용할 수 있습니다. 여기에는 대화 상자가 표시되지 않습니다. 사용자가 새 매개변수를 설정하도록 요청한 후 다시 호출합니다. 이 호출은 사용자가 마지막 필터 명령으로 호출할 때 발생하지 않습니다. (위 사진에 참석하세요). 따라서 잘못된 매개변수로 인해 프로그램이 중단될 위험이 있는 경우 매개변수를 매번 확인하고 검증하고 초기화해야 합니다.
주목! : 크기가 다른 이미지에도 동일한 매개변수를 사용할 수 있으므로 매개변수는 이미지 크기에 따라 달라져서는 안 됩니다. 예를 들어, 매개변수는 이미지 너비나 높이에 의존해서는 안 됩니다. 일반적으로 매개변수로 백분율이나 축척 비율을 사용하는 것이 더 적합합니다.
따라서 매개변수 데이터 블록에는 다음 정보가 포함되어야 합니다.
1. 필터가 해당 매개변수 데이터임을 신속하게 확인할 수 있도록 하는 서명입니다.
2. 서명을 변경하지 않고도 플러그인을 자유롭게 업그레이드할 수 있도록 하는 버전 번호입니다.
3. 바이트 순서 식별. (크로스 플랫폼 목적의 경우) 현재 사용 중인 엔디안을 나타냅니다.
매개변수 블록(매개변수 데이터 블록) 및 스크립팅 시스템(스크립트 설명 시스템)
스크립팅 시스템은 매개변수를 캐시하는 데 사용되며 각 호출 유형에 사용됩니다. . 모든 매개변수를 저장하는 데 사용할 수 있도록 플러그인에 전달됩니다. 매개변수 블록이 검증되면 전달된 매개변수에서 데이터를 읽은 다음 매개변수를 업데이트해야 합니다. 예:
1. 먼저 ValidateMyParameters를 호출하여 전역 매개변수를 확인하거나 초기화합니다.
2. 그런 다음 ReadScriptingParameters 메서드를 호출하여 매개변수를 읽고 전역 매개변수 데이터 구조에 씁니다.
(3.2) filterSelectorPrepare 호출:
이 호출을 사용하면 플러그인 모듈이 ps의 메모리 할당 알고리즘을 조정할 수 있습니다. "마지막 필터" 명령은 이 호출에서 시작됩니다. PS는 maxSpace(FilterRecord 구조(두 번째 매개변수)의 멤버이며 이후에 나타나는 새 멤버는 특별히 설명되지 않음)를 플러그인에 할당할 수 있는 최대 바이트 수로 설정합니다.
imageSize, planes 및 filterRect 멤버:
이러한 멤버는 이제 정의되었으며(SDK 6.0 참조) 메모리 요구 사항을 계산하는 데 사용할 수 있습니다. 이미지 크기, 이미지 크기. 비행기, 채널 수.
filterRect: 필터 직사각형.
여기서는 PS에서 정의한 Rect 유형(Windows API의 RECT 구조와 유사)인 filterRect를 다시 강조하고 싶습니다. 이 개념은 "변위 필터 원리"에 대한 내 연구 게시물에서 반복적으로 언급하고 강조한 "선택 포함 사각형"의 개념이기도 합니다. 당시 저는 아직 PS SDK를 접하지 못했습니다. 여기서 우리는 Photoshop의 코드에서 filterRect라고 불리는 것을 볼 수 있습니다.
버퍼스페이스:
필터가 32K 이상의 공간을 할당하려는 경우 이 멤버는 적용하려는 바이트 수로 설정되어야 합니다. ps는 다음 호출(호출 시작) 전에 이 크기의 공간을 해제하여 다음 호출이 성공하도록 시도합니다.
(3.3) filterSelectorStart 호출:
이 호출에서는 매개변수 데이터 블록을 확인하고 ps에서 전달된 매개변수를 기반으로 자체 매개변수를 업데이트하고 필요한 경우 UI를 표시해야 합니다. 그런 다음 데이터 처리 프로세스로 이동합니다.
advanceState 콜백: (PS에 해당 데이터 업데이트를 요청하는 데 사용)
PS가 필터에 제공하는 매우 중요한 콜백 함수로 다음과 같이 정의됩니다.
#define MACPASCAL
typedef short OSErr;
typedef MACPASCAL OSErr (*AdvanceStateProc) (void);
그의 기능은 PS가 FilterRecord의 오래된 데이터를 즉시 업데이트하도록 요구하는 것입니다. 예를 들어, 새로운 처리 사각형을 설정한 다음 이 함수를 호출하면 이 호출 후에 필요한 새 데이터를 얻을 수 있습니다. 이 콜백을 사용하면 계속 호출을 사용하지 않고도 시작 호출에서 핵심 처리를 모두 수행할 수 있습니다. 처리가 완료되면 inRect=outRect=maskRect=NULL로 설정할 수 있습니다.
이 콜백을 사용하지 않는 경우 첫 번째 직사각형 영역을 설정한 다음 계속을 사용하여 루프 처리를 호출해야 합니다.
예를 들어 시작 호출에서 다음 루프를 사용하여 전체 이미지 처리가 완료될 때까지 이미지를 처리할 수 있습니다.
advanceState 콜백 예시
Gaussian Blur(3*3 템플릿)
(5) 결론:
마지막으로 필터 사용 효과의 스크린샷을 살펴보겠습니다. PS가 시작되면 각 플러그인 디렉토리의 플러그인을 검색하여 로드합니다. 해당 메뉴로 이동하세요.
처리 결과:
마지막으로 이 필터의 압축 패키지에 대한 다운로드 링크가 있습니다:
RainDropFilter.rar
설치 방법은 다음과 같습니다. 파일의 압축을 풀고 Photoshop의 필터 설치 디렉터리에 넣기만 하면 됩니다. 예를 들어 Photoshop CS의 경우 필터 설치 디렉터리는
“C:Program FilesAdobePhotoshop CS 플러그인 필터” 형식일 수 있습니다.
PS에 대하여 SDK는 Adobe 공식 홈페이지에서 현재 무료인지는 모르겠습니다. . . . .
(6) 참고자료:
(1) Photoshop SDK 6.0.
(2)Photoshop SDK CS.
(3) (Raindrop 필터 알고리즘) 필터: Raindrops: http://www.php.cn/
--------- -- ------------------------------------------------ -- ---
부록: Adobe SDK의 설명!
---------------------------------- --- ----------------
// ADOBE SYSTEMS INCORPORATED
// 저작권 1993 - 2002 Adobe Systems Incorporated
// All Rights Reserved
//
// ADOBE Systems Incorporated
// Copyright 1993 - 2002 Adobe Incorporated
// All Rights Reserved.
//
// 주의 사항: Adobe는 동봉된 Adobe 라이센스 계약
//의 조건에 따라 이
// 파일을 사용, 수정 및 배포하는 것을 허용합니다. 이 파일을 Adobe가 아닌 소스
//에서 받은 경우 해당 파일을 사용, 수정 또는 배포
//하려면 Adobe의 사전 서면 승인이 필요합니다.
//
// 참고: Adobe는 해당 Adobe 라이센스 계약의 조건에 따라 이 파일을 사용, 수정 및 배포하는 것을 허용합니다.
// Adobe가 아닌 타사로부터 이 파일을 얻은 경우 사용, 수정 및 배포하려면 이전에 서명한 Adobe 라이센스 계약이 필요합니다.
//---------------------------------- ---------------------
Photoshop용 타사 필터 플러그인 개발에 대한 더 많은 소개 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!