Imagedestroy 不会释放内存

发布于 2024-12-21 12:35:10 字数 512 浏览 0 评论 0原文

我运行一个循环,其中包含一个脚本,该脚本可识别图像中的白色背景,然后复制没有白色背景的图像的裁剪版本。在循环结束时,我使用 imagedestroy 释放内存,但脚本仍然超出内存限制(> 256mb)。 怎么会这样呢?

循环内代码:

$img = imagecreatefromjpeg($imgSrc);

/* Script for identifying whitespace */

//create new image
$newimg = imagecreatetruecolor(
            imagesx($img)-($wsLeft+$wsRight), imagesy($img)-($wsTop+$wsBottom));

//get new width and height
$width = imagesx($newimg);
$height = imagesy($newimg);

//free memory
imagedestroy($newimg);
imagedestroy($img);

I run a loop that contains a script that identifies white backgrounds in images and then copies a cropped version of the image without that white bacground. In the end of the loop I use imagedestroy to free the memory but the script nonetheless exceed memory limit (>256mb).
How can this be?

Code inside loop:

$img = imagecreatefromjpeg($imgSrc);

/* Script for identifying whitespace */

//create new image
$newimg = imagecreatetruecolor(
            imagesx($img)-($wsLeft+$wsRight), imagesy($img)-($wsTop+$wsBottom));

//get new width and height
$width = imagesx($newimg);
$height = imagesy($newimg);

//free memory
imagedestroy($newimg);
imagedestroy($img);

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

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

发布评论

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

评论(1

几度春秋 2024-12-28 12:35:10

我有同样的内存问题(在循环中创建数百个图像)。尝试在函数中放入尽可能多的内容。出于某种原因,PHP 处理图像资源的功能有所不同。

<?php
$newimg = imagecreatefromjpeg2($imgSrc,$wsLeft,$wsRight,$wsTop,$wsBottom);

function imagecreatefromjpeg2($imgSrc,$wsLeft,$wsRight,$wsTop,$wsBottom){
    $img = imagecreatefromjpeg($imgSrc);
    $newimg = imagecreatetruecolor(
    imagesx($img)-($wsLeft+$wsRight), imagesy($img)-($wsTop+$wsBottom));


        imagedestroy($img);
        return $newimg
}
$width = imagesx($newimg);
$height = imagesy($newimg); 
 ?>

I had the same Problems with Memory (creating hundreds of Images in a Loop). Try to put as much you can in functions. For any reason PHP handles Image-Resources different in functions.

<?php
$newimg = imagecreatefromjpeg2($imgSrc,$wsLeft,$wsRight,$wsTop,$wsBottom);

function imagecreatefromjpeg2($imgSrc,$wsLeft,$wsRight,$wsTop,$wsBottom){
    $img = imagecreatefromjpeg($imgSrc);
    $newimg = imagecreatetruecolor(
    imagesx($img)-($wsLeft+$wsRight), imagesy($img)-($wsTop+$wsBottom));


        imagedestroy($img);
        return $newimg
}
$width = imagesx($newimg);
$height = imagesy($newimg); 
 ?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文