imagecreatefromjpeg проблема с памятью - PullRequest
1 голос
/ 25 мая 2009

Привет всем, я пытаюсь изменить размер изображения 700 КБ с помощью imagecreatefromjpeg.

Это выдает ошибку: Неустранимая ошибка: допустимый объем памяти 25165824 байта исчерпан (попытка выделить 9356 байтов)

Сначала значение memory_limit было 8M, затем мы установили его на 24M, но затем оно все равно выдает ошибку. Это утечка памяти? Что могло случиться? Мы уже перезапустили apache.

Вот код для тех, кому интересно:

function getResizedBackgroundImageURL($afb="",$params="") {
#1. Verwijder webroot
$filename=C_Settings::getFileRoot().str_replace(C_Settings::getWebRoot(),"",$afb);
$i=strrpos($filename,".");
if ($i!==FALSE) {
    $ext=substr($filename,$i);
    $basefilename=substr($filename,0,$i);

    #Parse width/height params
    $a=explode("&",$params);
    foreach($a as $attr) {
        $b=explode("=",$attr);
        if ($b[0]=="w") {
            $w=$b[1];
        }   elseif ($b[0]=="h") {
            $h=$b[1];
        }
    }

    if (!is_numeric($w)) {
      die("Missing param w for getResizedBackgroundImageURL");
    }

    if (!is_numeric($h)) {
      die("Missing param h for getResizedBackgroundImageURL");
    }

    #Compose new filename
    $newFilename=$basefilename."_w".$w."_h".$h.$ext;
    #See if the resized image exists
    if (!file_exists($newFilename)) {
    if (is_file($filename)) {
        if($ext==".jpg" || $ext==".jpeg"){

            $image_org=imagecreatefromjpeg($filename);


        }
        if($ext==".gif") {
            $image_org=@imagecreatefromgif($filename);
        }

        if ($image_org) {
            list($wp,$hp,$type,$attr)=getimagesize($filename);
            $hfactor=$hp/$h;
            $wfactor=$wp/$w;
            if ($hfactor > $wfactor) {
            $factor=$hfactor;
        } else {
            $factor=$wfactor;
        }   
                if($wp > $w || $hp > $h) {
        $image_w=$wp/$factor;
        $image_h=$hp/$factor;
        }else{
            #if image fits the given boundaries, do not resize
            $image_w=$wp;
        $image_h=$hp;               
        }
        //Note: PHP with GD2.0 required for imagecreatetruecolor
        $img_copy=imagecreatetruecolor($image_w, $image_h);
        imagecopyresampled($img_copy, $image_org, 0, 0, 0, 0, $image_w, $image_h, $wp, $hp);

            if (@imagejpeg($img_copy, $newFilename, 80)) {
                chmod($newFilename,0777);
            }   else {
                echo("<b>Error: </b>Unable to create image $newFilename. Check directory permissions.");
            }   

          imagedestroy($image_org);
            imagedestroy($img_copy);
    }
  }      
    }
    $newURL=C_Settings::getWebRoot().str_replace(C_Settings::getFileRoot(),"",$newFilename);
    return $newURL;     
}   

}

1 Ответ

8 голосов
/ 25 мая 2009

Увеличивайте объем памяти до тех пор, пока у вас не будет достаточно, и убедитесь, что вы используете imagedestroy (), когда закончите обработку.

ini_set("memory_limit","10000M");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...