gpt4 book ai didi

c - 与 gd php 扩展交互

转载 作者:行者123 更新时间:2023-11-30 15:33:22 24 4
gpt4 key购买 nike

我的目标是为专有图像格式创建一个 PHP 扩展,并让它创建一个与 gd 兼容的图像资源,该资源可以与 gd PHP 扩展的功能一起使用。

现在,浏览 gd 源代码,我发现了其 gdImagePtr 指针的 struct/typedef - 这似乎是扩展程序包装为前面提到的“图像资源”的内容。该结构本身完全由标准 C 类型组成,因此我想问...

如果我要在扩展中使用相同的结构,用该图像格式中的适当数据填充它,并以相同的方式将其提供给 PHP,这会起作用吗?或者这个图像资源更像是一个句柄,并且必须在 gd 本身内创建才能工作?

最佳答案

答案是肯定的,只需一个额外的小步骤。

我的第一个测试是直接与 gd 交互 - 果然,只要正确填充结构,gd 就非常乐意将第三方 gdImagePtr 用于其他用途。在我的测试中,我简单地创建了一个带有图片框的表单,并使用 .NET 的非托管内存流与 gdImagePngPtr 相结合,将我填充的 ​​gdImagePtr 提供给它,并且它运行得很好。

当然,下一步是使用 PHP 来完成此操作,但由于有一个中间人 - 即此 gdImagePtr 转换成的 ZEND_RESOURCE,因此还涉及一个额外步骤。 ZEND 为每个扩展提供了自己唯一的 id - 因此仅使用该结构创建您自己的资源是行不通的。但是,gd 扩展提供了自己的 API - 只有一个函数。

因此,如果您包含 php_gd.h,您可以执行以下操作:

ZEND_REGISTER_RESOURCE(return_value, im, phpi_get_le_gd());

phpi_get_le_gd() 替换标准 module_number(您的扩展程序的 id)将使该资源“属于”gd 扩展程序,从而允许您使用图像资源PHP 中的其他 gd 函数。

关于c - 与 gd php 扩展交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com