Php 使用ImageMagick时是否使用shell_exec()或imagick扩展?
在过去,我在处理图像时使用过GD,但我读过ImageMagick比GD更好,我正在考虑在我的下一个项目中使用它 我最初计划使用PECL imagick扩展,但后来我在ImageMagick论坛上读到: Imagick不再得到很好的支持,并且不是由ImageMagick团队创建的。因此,我不知道在这一点上要告诉你什么,除了在所有事情上都使用PHP exec()。Imagick不支持许多较新的Imagemagick功能,您从中收获不多Php 使用ImageMagick时是否使用shell_exec()或imagick扩展?,php,imagemagick,imagick,Php,Imagemagick,Imagick,在过去,我在处理图像时使用过GD,但我读过ImageMagick比GD更好,我正在考虑在我的下一个项目中使用它 我最初计划使用PECL imagick扩展,但后来我在ImageMagick论坛上读到: Imagick不再得到很好的支持,并且不是由ImageMagick团队创建的。因此,我不知道在这一点上要告诉你什么,除了在所有事情上都使用PHP exec()。Imagick不支持许多较新的Imagemagick功能,您从中收获不多 如果我决定使用ImageMagick,我是否应该避免使用imag
如果我决定使用ImageMagick,我是否应该避免使用imagick扩展而改用
shell\u exec()
?如果您可以通过exec
执行所有操作,那么这可能是调用ImageMagick最有效的方法
如果您想使用Imagick API,请放心,它是维护的(我是维护人员),如果您发现ImageMagick的任何功能没有通过它公开,请告诉我们:
通过exec或Imagick调用ImageMagick的唯一限制是,您确实不希望直接在web服务器中调用任何图像处理函数。让图像处理在后台任务中排队,并由“队列处理器”进行处理,这样您的web服务器就不会因为图像处理而减慢速度,这会好得多
我使用的队列处理器是一个简单的设置,使用:
- 运行PHP脚本
- 一个小PHP脚本,它等待从队列中读取图像处理请求,解压参数并调用相应的图像处理函数
- 然后保存处理过的文件。您可以使用事件通知通知web服务器已处理的文件现在可用;相反,我使用一致哈希生成文件名。这允许web服务器检查文件是否已生成,只需检查文件_exists()。e、 g.如果生成图像的函数是
,则生成的文件名将是charcoalimage
,因此需要图像的web服务器和队列处理器都可以计算相同的文件名“charcoalimage”。sha1($parameters)
- 在处理过程中,任何尚未生成该图像的请求都会因睡眠几秒钟而“延迟”。浏览器重定向到同一URL,但添加了一个额外参数,以防止浏览器认为存在重定向循环。当图像由后台任务生成时,显然该文件只是由web服务器提供的
一旦队列中有慢的东西并由后台任务处理,则根据需要向其投入更多的处理资源、监视队列的延迟或失败的作业就变得非常简单。当处理在web服务器中完成时,所有这些事情都要困难得多。如果您可以通过
exec
执行所有操作,那么这可能是调用ImageMagick最有效的方法
如果您想使用Imagick API,请放心,它是维护的(我是维护人员),如果您发现ImageMagick的任何功能没有通过它公开,请告诉我们:
通过exec或Imagick调用ImageMagick的唯一限制是,您确实不希望直接在web服务器中调用任何图像处理函数。让图像处理在后台任务中排队,并由“队列处理器”进行处理,这样您的web服务器就不会因为图像处理而减慢速度,这会好得多
我使用的队列处理器是一个简单的设置,使用:
- 运行PHP脚本
- 一个小PHP脚本,它等待从队列中读取图像处理请求,解压参数并调用相应的图像处理函数
- 然后保存处理过的文件。您可以使用事件通知通知web服务器已处理的文件现在可用;相反,我使用一致哈希生成文件名。这允许web服务器检查文件是否已生成,只需检查文件_exists()。e、 g.如果生成图像的函数是
,则生成的文件名将是charcoalimage
,因此需要图像的web服务器和队列处理器都可以计算相同的文件名“charcoalimage”。sha1($parameters)
- 在处理过程中,任何尚未生成该图像的请求都会因睡眠几秒钟而“延迟”。浏览器重定向到同一URL,但添加了一个额外参数,以防止浏览器认为存在重定向循环。当图像已被删除时