内存限制=80M。 imagecreateformjpeg() 的最大图像尺寸是多少?

发布于 2024-09-12 00:23:24 字数 186 浏览 3 评论 0原文

我有一个虚拟主机,最大内存限制为 80M(即 ini_set("memory_limit","80M");)。 我正在使用使用函数 imagecreatefromjpeg(); 的照片上传。 当我上传大图片时出现错误 “致命错误:允许的内存大小 83886080 字节已耗尽” 我可以限制用户的图像最大大小(以字节为单位)? 或者内存限制取决于其他一些因素?

i have a webhosting that gives maximum memory_limit of 80M (i.e. ini_set("memory_limit","80M");).
I'm using photo upload that uses the function imagecreatefromjpeg();
When i upload large images it gives the error
"Fatal error: Allowed memory size of 83886080 bytes exhausted"
What maximum size (in bytes) for the image i can restrict to the users?
or the memory_limit depends on some other factor?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

停顿的约定 2024-09-19 00:23:24

8388608 的内存大小是 8 MB,而不是 80。您可能需要检查是否仍然可以在某处增加该值。

除此之外,图像处理的一般规则是

image width x image height x 3 

加载或创建图像至少需要字节的内存。 (一个字节表示红色,一个字节表示绿色,一个字节表示蓝色,可能还需要一个字节表示 alpha 透明度)

根据该规则,一张 640 x 480 像素的图像将需要至少 9.2 MB 的空间 - 不包括开销和占用的空间脚本本身。

无法确定 JPG 文件大小的限制(以字节为单位),因为 JPG 是一种具有可变压缩率的压缩格式。您需要根据图像分辨率并对其设置限制。

如果您没有那么多可用内存,您可能需要寻找更有效的方法来完成您想要的操作,例如平铺(一次处理图像的一部分),或者,如果您的提供商允许的话,使用外部像 ImageMagick 这样的工具(它也会消耗内存,但超出了 PHP 脚本的内存限制) 。

The memory size of 8388608 is 8 Megabytes, not 80. You may want to check whether you can still increase the value somewhere.

Other than that, the general rule for image manipulation is that it will take at least

image width x image height x 3 

bytes of memory to load or create an image. (One byte for red, one byte for green, one byte for blue, possibly one more for alpha transparency)

By that rule, a 640 x 480 pixel image will need at least 9.2 Megabytes of space - not including overhead and space occupied by the script itself.

It's impossible to determine a limit on the JPG file size in bytes because JPG is a compressed format with variable compression rates. You will need to go by image resolution and set a limit on that.

If you don't have that much memory available, you may want to look into more efficient methods of doing what you want, e.g. tiling (processing one part of an image at a time) or, if your provider allows it, using an external tool like ImageMagick (which consumes memory as well, but outside the PHP script's memory limit).

怀念你的温柔 2024-09-19 00:23:24

可能您的脚本使用的内存比图像本身更多。尝试调试您的内存消耗。

一种快速而肮脏的方法是利用 memory_get_usage 和 memory_get_usage memory_get_peak_usage 在代码中的某些点上,特别是在自定义 error_handler 中> 和 shutdown_function。这可以让您知道哪些操作导致内存耗尽。

Probably your script uses more memory than the just the image itself. Trying debugging your memory consumption.

One quick-and-dirty way is to utilize memory_get_usage and memory_get_usage memory_get_peak_usage on certain points in your code and especially in a custom error_handler and shutdown_function. This can let you know what exact operations causes the memory exhaustion.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文