2014-05-20 9 views
0

내 목표는 독점적 인 이미지 형식을위한 PHP 확장을 생성하고 gd PHP 확장 기능과 함께 사용할 수있는 gd 호환 이미지 리소스를 생성하는 것입니다.gd php extension과의 상호 작용

이제 gd 소스 코드를 살펴본 결과, gdImagePtr 포인터에 대한 struct/typedef가 나타났습니다.이 확장자는 앞에서 설명한 "이미지 리소스"와 같습니다. 구조체 자체는 전적으로 표준 C 유형으로 구성되어 있기 때문에 묻습니다.

내 구조에서 동일한 구조체를 사용하려면이 이미지 형식의 해당 데이터를 채워서 사용 가능하게 만드십시오. PHP와 같은 방식으로 작동합니까? 아니면이 이미지 리소스가 핸들처럼 작동하며 gd 자체 내에서 만들어 져야 작동 할 수 있습니까?

답변

1

대답은 '예'로, 약간의 추가 단계가 있습니다.

첫 번째 테스트는 단순히 gd와 직접 상호 작용하는 것이 었습니다. 구조체가 제대로 채워지면 다른 용도로 gdImagePtr을 사용하는 것이 행복합니다. 내 테스트에서는 그림 상자가있는 양식을 만들고 gdImagePngPtr과 결합 된 .NET의 관리되지 않는 memorystream을 사용하여 채워진 gdImagePtr으로 완벽하게 작동했습니다.

다음 단계는 물론 PHP로 수행하는 것이지만, 중급 사람이 있기 때문에이 gdImagePtr이 ZEND_RESOURCE인데 추가 단계가 필요합니다. ZEND는 각 확장에 고유 한 ID를 부여합니다. 따라서 단순히 구조체를 사용하여 자체 리소스를 만드는 것이 효과가 없습니다. 그러나 gd 확장은 하나의 함수만으로 자체 API를 제공합니다. 당신이 사용할 수 있도록

ZEND_REGISTER_RESOURCE(return_value, im, phpi_get_le_gd()); 

GD 확장에 "소속"을 해당 리소스를 만들 것입니다 phpi_get_le_gd()와 표준 module_number (확장의 ID를) 교체 : 당신이 php_gd.h을 포함하는 경우

그래서, 다음을 수행 할 수 있습니다 PHP에서 다른 gd 함수를 사용하는 이미지 리소스.