PHP重建映像:内存使用情况

时间:2011-08-17 11:57:31

标签: php image-processing

  

致命错误 /var/www/development/example/system/libraries/Image.php 在线 130

有问题的JPEG图像没有特别大的文件大小(741 KB)。我们使用相同的代码来重建更大的图像。但是,图像确实具有异常大的尺寸(4912像素x 3264像素)。这会产生影响吗?

什么决定PHP重建图像时的内存使用量?它只是文件大小?尺寸?颜色密度?文件类型?

它破坏的线是

$f1    = 'imagecreatefrom' . $tag;
$src   = $f1($file);

我认为这是足够的背景。它没有尝试重建图像。将其加载到内存中足以打破它。

4 个答案:

答案 0 :(得分:2)

增加内存缓冲区大小

你的.htacess中的

php_value memory_limit 64M

你的php文件中的

ini_set('memory_limit','64M');

答案 1 :(得分:2)

正如riky所说,如果可以,请设置更高的内存限制。还要意识到尺寸比文件大小更重要(因为文件大小适用于压缩图像)。当您在GD中打开图像时,每个像素分配3-4个字节,RGB和可能的A.因此,您的4912px x 3264px图像需要使用48,098,304到64,131,072字节的内存,此外还有开销和任何其他内存脚本正在使用。

答案 2 :(得分:0)

这取决于你的实施。上次当我处理超过500000条记录的csv文件时,我得到了同样的消息。后来我介绍了类并尝试关闭打开的对象。它减少了它的记忆消耗。如果您要打开图像并进行编辑。这意味着它正在加载到内存中。在这种情况下大小真的很重要。如果您正在操作多个图像。我将为每个图像记录一个,然后关闭该图像。根据我的经验,我在制作pdf图稿文件时检查裁剪标记。我遇到了同样的错误。

//you can set the memory limits values 
// in htaccess
php_value memory_limit 64M 
//or in you using following in php
ini_set('memory_limit', '128M'); 
//or update it in your php.ini file

但是如果您优化代码。并使用面向对象的aproach然后你的内存消耗将非常少。因为每个对象都有自己的范围,超出了范围,所以它被销毁了。

答案 3 :(得分:0)

所用内存的大小取决于尺寸和颜色位深度。 几年前我也遇到了这个问题,同时为摄影师建立了一个投资组合网站。正确解决这个问题的唯一方法是将图像库从GD切换到想象。 Imagick消耗的内存要少得多,并且与PHP内存限制无关。

我不得不说摄影师上传的图片高达30MP。将内存限制设置为超过1024MB对我来说毫无意义。