PHP重建图像:内存使用

PHP重建图像:内存使用,php,image-processing,Php,Image Processing,致命错误:允许在/var/www/development/example/system/libraries/Image.php在线130中耗尽33554432字节的内存大小(尝试分配4912字节) 所讨论的JPEG图像没有特别大的文件大小(741 KB)。我们使用了相同的代码来重建更大的图像。但是,图像的尺寸确实非常大(4912px 3264px)。这会有影响吗 当PHP重建图像时,什么决定了内存使用?只是文件大小吗?尺寸?颜色密度?文件类型? 它断开的那根线是 $f1 = 'imagec

致命错误:允许在/var/www/development/example/system/libraries/Image.php在线130中耗尽33554432字节的内存大小(尝试分配4912字节)

所讨论的JPEG图像没有特别大的文件大小(741 KB)。我们使用了相同的代码来重建更大的图像。但是,图像的尺寸确实非常大(4912px 3264px)。这会有影响吗

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

它断开的那根线是

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

我想这已经足够了。它甚至没有尝试重建图像。将其加载到内存中足以使其中断。

增加内存缓冲区大小

php\u值内存\u限制64M
在您的.htacess中


ini_集('memory_limit','64M')增加内存缓冲区大小

php\u值内存\u限制64M
在您的.htacess中


ini_集('memory_limit','64M')取决于您的实现。上一次当我处理超过500000条记录的csv文件时,我收到了同样的信息。后来我引入类并尝试关闭打开的对象。它减少了it内存消耗。如果要打开图像并对其进行编辑。这意味着它正在内存中加载。在这种情况下,尺寸真的很重要。如果您正在操作多个映像。我将记录到每个图像一个,然后关闭该图像。根据我的经验,当我在处理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

但是如果你优化了你的代码。使用面向对象的方法,内存消耗会非常少。因为每个对象都有自己的作用域,在这个作用域之外,它就会被销毁

这取决于你的实施。上一次当我处理超过500000条记录的csv文件时,我收到了同样的信息。后来我引入类并尝试关闭打开的对象。它减少了it内存消耗。如果要打开图像并对其进行编辑。这意味着它正在内存中加载。在这种情况下,尺寸真的很重要。如果您正在操作多个映像。我将记录到每个图像一个,然后关闭该图像。根据我的经验,当我在处理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

但是如果你优化了你的代码。使用面向对象的方法,内存消耗会非常少。因为每个对象都有自己的作用域,在这个作用域之外,它就会被销毁

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

正如riky所说,如果可以,请将内存限制设置得更高一些。还要认识到尺寸比文件大小更重要(因为文件大小是用于压缩图像的)。在GD中打开图像时,每个像素都会获得分配给它的3-4个字节,RGB,可能还有A。因此,4912px x 3264px图像需要使用48098304到64131072字节的内存,此外还有开销和脚本正在使用的任何其他内存。

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


我不得不说,摄影师上传的图像高达30毫米。在我看来,将内存限制设置为1024MB以上毫无意义。

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


我不得不说,摄影师上传的图像高达30毫米。在我看来,将内存限制设置为1024MB以上毫无意义。

你用什么来构建图像?gd、GraphicsMagick、ImageMagick或其他什么?我想这取决于情况。我们可以看到错误所涉及的代码吗?
memory\u limit
php.ini指令。您已将其设置为32Mb。如果我没有错的话,它是生产服务器的默认值。关于内存使用-我同意上面的评论,这取决于你用什么来构建它。可能重复更多:你用什么来构建图像?gd、GraphicsMagick、ImageMagick或其他什么?我想这取决于情况。我们可以看到错误所涉及的代码吗?
memory\u limit
php.ini指令。您已将其设置为32Mb。如果我没有错的话,它是生产服务器的默认值。关于内存使用-我同意上面的评论,这取决于您使用什么来构建它。可能重复更多:好的评论,但我认为您应该使用bpp(每像素位)而不是RGB(A),因为有许多不同的格式来表示像素颜色。只是吹毛求疵。我以前遇到过这种问题,人们倾向于更好地理解RGB(A),但每像素位数更准确,可能更准确。评论不错,但我认为你应该使用bpp(每像素位数)而不是RGB(A),因为有很多不同的格式来表示像素颜色。只是吹毛求疵。我以前遇到过这样的问题,人们倾向于更好地理解RGB(A),但有些人不理解