如何减少图像GD的内存使用量或加速处理以更快地释放内存

3
我有一个使用GD图像的脚本,目前占用了约9MB的内存。由于我有很多访问量,有时候会在我的服务器上使用大量RAM。
有没有办法减少图像GD的内存使用?或者至少使脚本处理更快,以便更快地释放它正在使用的内存。
我尝试过改变图像质量,但没有效果。我还尝试过改变图像像素大小,虽然减少了内存使用,但不是很明显。
谢谢。
2个回答

0

没有看到代码是不可能确定的,但是除非它包含任何重大错误,否则答案可能是否定的。

你可能能够使用外部 imagemagick 二进制文件 - 它在 PHP 脚本内存限制之外运行 - 但这是完全不同的技术,需要你重新编写代码。

我假设你已经缓存了 GD 的结果,以便不会在每个请求时都运行它?


有很多代码需要展示,但我会尝试用文字解释我的代码。我有一个图像文件,还有大约10个其他小缩略图和约40个字符串,它们需要放在那个图像文件上。我认为缓存可能没有帮助,因为每次都会生成新的图像,因为缩略图/字符串每次都在改变。有什么帮助吗? - Anil Dewani
@Anil 嗯,这听起来确实很难缓存。除了一些可能的内存优化(比如在不需要变量后立即取消设置等),我认为没有太多优化的潜力。 - Pekka
我已经取消了变量。你认为有没有一种方法可以让图像GD处理得更快?这样脚本就能更快地完成,并释放内存以为其他请求腾出空间。 - Anil Dewani
@Anil 除了购买更快的服务器,我想没有其他办法了。 - Pekka
看起来我需要把我的网站应用程序迁移到云服务器上,可能是因为流量峰值有时会占用我的全部内存。虽然感谢你的帮助 :) - Anil Dewani
https://github.com/francodacosta/phmagick 是一个围绕建议的imagemagick的封装,因此您无需学习命令行参数来调整图像大小。只需使用PHP API即可。 - Slawa

0

如果您担心内存限制,请尽量避免在程序中动态使用图像GD。虽然没有看到代码很难解决问题,但我可以提出建议。

使用不同的进程来处理图像,例如,如果要调整图像大小,请不要每次用户访问页面时都进行调整,而是运行一个定期调整所有需要调整大小的图像的cron或计划程序,并保存它们。这样就会减少开销。

如果您提供更多的代码,您将获得更好的帮助。


有很多代码需要展示,但我会尝试用文字解释我的代码。我有一个图像文件,还有大约10个其他小缩略图和约40个其他字符串,这些都要放在那个图像文件上。每次缩略图/字符串都不同。我也不能使用cron,因为我必须立即向最终用户显示输出图像。 - Anil Dewani
听起来你正在使用这些图像作为验证码,当你渲染时,这些图像的像素大小是多少?也许制作较小的图像可以帮助。 - Ibu
@lbu,不是验证码,但类似的东西。是的,减小图像尺寸有助于减少内存使用量,但效果不大。遗憾的是,在我的Web应用程序中,我不能选择减小图像大小。 - Anil Dewani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接