[ Ïîèñê ] - [ Ïîëüçîâàòåëè ] - [ Êàëåíäàðü ]
Ïîëíàÿ Âåðñèÿ: Ãðàôèêà è ïàìÿòü
twin
Âîò ñòîëêíóëñÿ ÿ ñ ïðîáëåìîé, íè÷åãî íå ìîãó ïðèäóèàòü.
Åñòü ó ìåíÿ êëàññ çàãðóçêè è îáðàáîòêè èçîáðàæåíèé. Îí ãðóçèò êàðòèíêó, ïåðåæèìàåò â jpeg, ðåñàéçèò äî ðàçðåøåííûõ ðàçìåðîâ, äåëàåò äâå ïðåâüþøêè è íà ãëàâíîå èçîáðàæåíèå íàêëàäûâàåò ëîãîòèï. Âñå áû íè÷åãî, íî äëÿ îáðàáîòêè êàðòèíêè âåñîì 400kb îí ïðåâûøàåò ëèìèò ïàìÿòè (64mb) Ýòî íå êðèòè÷íî, òàê êàê ñêðèïò èñïîëüçóåòñÿ ðåäêî, íî õîñòåð òàê íå ñ÷èòàåò è åñòåñòâåííî îòðóáàåò åãî. sad.gif
Ïàìÿòü â êàæäîì ìåòîäå î÷èùàåòñÿ (äîëæíà î÷èùàòüñÿ) imagedestroy()
Íè êàê íå ñîîáðàæó, îòêóäà íàáåãàåò 64 ìåòðà...



Ñïóñòÿ 24 ìèíóòû, 24 ñåêóíäû (12.06.2009 - 18:46) kirik íàïèñàë(à):
Ïîïðîáóé ïîñëå imagedestroy() äåëàòü unset() ðåñóðñó, êîòîðûé ñîçäàåò imagecreatefrom...().

Ñïóñòÿ 11 ìèíóò, 41 ñåêóíäà (12.06.2009 - 18:57) twin íàïèñàë(à):
Íå, íå ïîìîãàåò. Äà è imagedestroy() âðîäå êàê ñàìà ïî ñåáå äîëæíà î÷èùàòü ïàìÿòü, à çíà÷èò è ðåñóðñ óáèòü. Õîòü äåëè ïî ñêðèïòàì è ÷åðåç ñåññèþ... Îáèäíî áëèí, êëàññîì òî êóäà ïðèÿòíåå.

Ñïóñòÿ 5 ìèíóò, 45 ñåêóíä (12.06.2009 - 19:03) kirik íàïèñàë(à):
Ó ìåíÿ áûëà ïðîáëåìà ñ imagedestroy(). Òàê æå åñòü êëàññ ïî ðàáîòå ñ êàðòèíêàìè, è â ìåòîäå save() (÷òîáû ñîõðàíèòü èçìåíåííóþ êàðòèíêó) ïðîèçâîäèëñÿ âûçîâ imagedestroy, íî ïîñëå îáðàáîòêè ñëåäóþùåé êàðòèíêè îáðàáàòûâàëàñü ïî÷åìó-òî ñòàðàÿ. Ïðèøëîñü äåëàòü unset() äëÿ ðåñóðñà..

À ìîæåøü ýòîò êëàññ ïîêàçàòü?

Ñïóñòÿ 5 ìèíóò, 22 ñåêóíäû (12.06.2009 - 19:08) twin íàïèñàë(à):
Âîò:
Ñâåðíóòûé òåêñò
PHP
<?php

class UpFile
{
    private $Arr = array('.gif','.jpg','.jpeg','.png');
    private $Name = NULL;
    private $Type = NULL;        
    private $Upfile 
= NULL;            
        
  function New_name
($name = false)
  {
        if($name)
        $this->Name = $name."_".date('U');
        else
        $this
->Name = date('U');
        
  
}    
        
  function UploadDir
($dir)
  {
    $dir =     $dir.'/';
    $this->Upname = $dir.$this->Name;
    $this->Dir = $dir;    
  
}

  function Upload($num = false)
  {
        if( $_FILES['file'.$num]['name'] && $_FILES['file'.$num]['error'] == 0 
        
&& $_FILES['file'.$num]['size'] > 0 && $_FILES['file'.$num]['size'] < MAX_SIZE * 1024 )
        {
        $this->Type = strrchr($_FILES['file'.$num]['name'], ".");
        $this->Type = mb_strtolower($this->Type);
        
            if
(in_array($this->Type, $this->Arr) )
            {
            $size_img = getimagesize($_FILES['file'.$num]['tmp_name']);
                if($size_img[0] >= WIDTH_PREW || $size_img[1] >= HEIGTH_PREW)
                        move_uploaded_file($_FILES['file'.$num]['tmp_name'], $this->Upname.$this->Type);
            }
        
        
}
        
        if
(file_exists($this->Upname.$this->Type))    
        return $this
->Name.$this->Type;
  }
    

  function ResizeImg
($prew = false)  
  
{ 
    
    if
(!$prew)
    {
    $wf = WIDTH_FULL; 
    $hf 
= HEIGTH_FULL;
    $filename = $this->Upname.$this->Type;
    $smallimage = $this->Dir.$this->Name.'.jpg';    
    $ratio 
= $wf / $hf;        
    
    $size_img 
= getimagesize($filename);        
    $src_ratio 
= $size_img[0] / $size_img[1];
         
        if 
(($size_img[0] < $wf || $size_img[1] < $hf) && $prew )
        {
        return false; 
        
}
        elseif($size_img[0] > $wf || $size_img[1] >  $hf)
        {
                
            if
($size_img[0] > $wf)
            $w = $wf;
            else
            $w 
= $size_img[0];
            
                   
            if
($size_img[1] > $hf)
            $h = $hf;
            else
            $h 
= $size_img[1];
            
            if 
($ratio < $src_ratio)                
            $h 
= round($wf / $src_ratio);    
            else 
            $w 
= round($hf * $src_ratio);       
    
        
}    
        else
        
{
    $w = $size_img[0];
    $h = $size_img[1];
        }
    
    
}
    else
    
{
    $w = WIDTH_PREW;
    $h = HEIGTH_PREW;
    $filename = $this->Upname.'.jpg';
    $smallimage = $this->Dir.'fsmall/'.$this->Name.'.jpg';
    $ratio = $w / $h;
    
    $size_img 
= getimagesize($filename);        
    $src_ratio 
= $size_img[0] / $size_img[1];


if(
$src_ratio > $ratio)
$w = $w * $src_ratio / $ratio;

        
if($src_ratio < $ratio)
$h = $h / $src_ratio * $ratio;

    }
    
    
$dest_img 
= imagecreatetruecolor($w, $h);     
$white 
= imagecolorallocate($dest_img, 255, 255, 255);  
         
    if 
($size_img[2] == 2)  $src_img = imagecreatefromjpeg($filename);                         
    else if 
($size_img[2] == 1) $src_img = imagecreatefromgif($filename);                         
    else if 
($size_img[2] == 3) $src_img = imagecreatefrompng($filename); 
                                             
imagecopyresampled
($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
   
imagejpeg
($dest_img, $smallimage);
 
            
imagedestroy
($dest_img);
unset(
$dest_img);    
imagedestroy
($src_img);
unset(
$src_img);

            if($this->Type !== '.jpg')
            @unlink($this->Upname.$this->Type);
            
$size_img 
= getimagesize($filename);

        if($prew && ($size_img[0] > WIDTH_PREW || $size_img[1] > HEIGTH_PREW))
        $this->CutPhoto();
        
                        
return $this
->Name.'.jpg';    
  
} 
        
  function CutPhoto
()
  { 
    $filename 
= $this->Dir.'fsmall/'.$this->Name.'.jpg';
    $smallimage = $this->Dir.'small/'.$this->Name.'.jpg';
        
    $size_img 
= getimagesize($filename);
    
    $x 
= $y = 0;
    
    if
($size_img[0] > WIDTH_PREW)
    $x = round(($size_img[0] - WIDTH_PREW) / 2);
    
    if
($size_img[1] > HEIGTH_PREW)
    $y = round(($size_img[1] - HEIGTH_PREW) / 2);
        
    $dest_img 
= imagecreatetruecolor(WIDTH_PREW, HEIGTH_PREW); 
    $bgc 
= imagecolorallocate($dest_img, 255, 255, 255); 
    imagefilledrectangle
($dest_img, $x, $y, WIDTH_PREW, HEIGTH_PREW, $bgc); 
    
 $src_img 
= imagecreatefromjpeg($filename);                         
    
imagecopyresampled
($dest_img, $src_img, 0, 0, $x, $y, WIDTH_PREW, HEIGTH_PREW, WIDTH_PREW, HEIGTH_PREW);
     
imagejpeg
($dest_img, $smallimage);

                  
    imagedestroy
($dest_img);
    unset($dest_img);   
    imagedestroy
($src_img);
    unset($src_img);

  }
 
  
  function AddLogo
()
  { 
    $filename 
= $this->Dir.$this->Name.'.jpg';
    $size_img = getimagesize($filename);
    
$src_img 
= imagecreatefromjpeg($filename);                         

  
    $logo 
= imagecreatefrompng('logo.png');   
    imagecopy
($src_img, $logo, 0, 0, 0, 0, $size_img[0], $size_img[1]);  
    imagejpeg
($src_img, $filename);  
    imagedestroy
($src_img); 
    unset
($src_img);
    imagedestroy($logo);
    unset($logo);
  } 
}

Ñïóñòÿ 44 ìèíóòû, 10 ñåêóíä (12.06.2009 - 19:53) kirik íàïèñàë(à):
twin
î÷åíü çàíÿòíî...
À ïîïðîáóé ñ ïîìîùüþ memory_get_usage() çàìåðèòü èñïîëüçîâàíèå ïàìÿòè ýòèì êëàññîì:

PHP
$mgu_start = memory_get_usage(true);
// âûïîëíÿåì ðåñàéçû
echo (memory_get_usage(true) - $mgu_start).' bytes';

Ñïóñòÿ 37 ìèíóò, 55 ñåêóíä (12.06.2009 - 20:31) twin íàïèñàë(à):
Áëèí, âåñåëàÿ èñòîðèÿ. Êàæåò âñåãî íàâñåãî 262kb... Íà ëîêàëêå. Ïðè÷åì íà ëþáîé ôàéë. À íà ñåðâàêå òîæ ñàìîå, òîëüêî ïðè ìàëåíüêèõ ôàéëàõ. À ïðè áîëüøèõ âàðíèíã. Âèäèìî äåëî â çàãðóçêå, à íå â ðåñàéçå.
Âîò ïîëèãîí ñäåëàë smile.gif

Ñïóñòÿ 44 ìèíóòû, 29 ñåêóíä (12.06.2009 - 21:15) kirik íàïèñàë(à):
Öèòàòà
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 10240 bytes) ...


Ïðè çàãðóçêå ïî èäåå íå äîëæíà ïàìÿòü ðàñõîäîâàòüñÿ (òàê ïèøåò Òàéìñ)...
Äåéñòâèòåëüíî ñòðàííîâàòî..

Ñïóñòÿ 8 ìèíóò, 25 ñåêóíä (12.06.2009 - 21:23) twin íàïèñàë(à):
Ñäåëàë çàãðóçêó îòäåëüíî. Ãðóçèò íà óðà... à âìåñòå íå õî÷åò çàðàçà. È çàìåð êàêîé òî èíòåðåñíûé, ÿ òàêîãî íå âèäåë... ׸òî îí ó ìåíÿ íà âñåõ ñêðèïòàõ îäíî è òîæå êàæåò)))

Ñïóñòÿ 17 ÷àñîâ, 23 ìèíóòû, 7 ñåêóíä (13.06.2009 - 14:47) twin íàïèñàë(à):
Ñïàñèáî, ó ìåíÿ ïðàâäà äðóãèå çàäà÷è. Òóò ëèøíåãî ìíîãî, ÿ ñïåöèàëüíî ïîä ñâîè íóæäû ïèñàë. Êîìïàêòíûé è íåçàòåéëèâûé. À ñóòü ó íèõ îäíà. Íî ñåíüê, ïîêîâûðÿþ. smile.gif


_____________
Åñëè âàì íåäîñòàòî÷íî ñîáñòâåííûõ çàáëóæäåíèé, ìîæíî ðàñøèðèòü èõ ìíåíèÿìè ýêñïåðòîâ.

Íóæíî óâàæàòü ìíåíèå îïïîíåòà. Âåäü çàáëóæäàòüñÿ - åãî ñâÿòîå ïðàâî.

Íàñòàèâàë, íàñòàèâàþ è áóäó íàñòàèâàòü íà ñâîåì. Íà êåäðîâûõ îðåøêàõ.

user posted image
Áûñòðûé îòâåò:

 Ãðàôè÷åñêèå ñìàéëèêè |  Ïîêàçûâàòü ïîäïèñü
Çäåñü ðàñïîëîæåíà ïîëíàÿ âåðñèÿ ýòîé ñòðàíèöû.
Invision Power Board © 2001-2024 Invision Power Services, Inc.