Kas
21

Php Resim Boyutlandırmasında Memory Limit sorunu

Herkese Merhaba,

Yüksek çözünürlüklü (HD) resimi yeniden boyutlandırmak istediğimde aşağıdaki hatayı aldım;

Fatal error: Allowed memory size of 8988608 bytes exhausted
(tried to allocate 43 bytes) in deneme.php

Sizde bu hatadan alıyorsanız yada resim üzerinde değişiklik yapacaksanız resime işlem yapmadan önce bellek kullanımını artırmanız gerekecek.

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

şimdi diyceksiniz ki iyi güzelde bunu resme göre limitini artırmamız mümkün mü?
Tabiki bu sorununda cevabı “evet” 🙂

Bunun için aşağıdaki kodu kullanabilirsiniz;

/**
*
* Resim üzerinde işlem yapabilmek için gerekli hafıza kullanım alanını set eder.
*
* @param string $filename
* @return    bool
*/
public function setMemoryForImage($filename)
{
$imageInfo = getimagesize($filename);
$MB = 1048576;  // number of bytes in 1M
$K64 = 65536;    // number of bytes in 64K
$TWEAKFACTOR = 1.5;  // Or whatever works for you
$memoryNeeded = round(($imageInfo[0] * $imageInfo[1] * $imageInfo['bits'] * $imageInfo['channels'] / 8 + $K64) * $TWEAKFACTOR);
$memoryHave = memory_get_usage();
//ini_get('memory_limit') only works if compiled with "--enable-memory-limit" also
//Default memory limit is 8MB so well stick with that.
//To find out what yours is, view your php.ini file.
$memoryLimitMB = (integer) ini_get('memory_limit');

$memoryLimit = 8 * $MB;
if (function_exists('memory_get_usage') && $memoryHave + $memoryNeeded > $memoryLimit)
{
$newLimit = $memoryLimitMB + ceil(($memoryHave + $memoryNeeded - $memoryLimit) / $MB);

ini_set( 'memory_limit', $newLimit . 'M' ); // Hafıza kullanım alanının set edildiği yer

return true;
}
else
{
return false;
}
}

Yukarıdaki kodun orjinal hali için tıklayınız.

Herkese iyi kodlamalar 🙂

Yorum Yapın

 

Twitter'dan Takip Et! Twitter'dan Takip Et!

Etiketler

Son Yazılar

Son Yorumlar

Haftanın Özlü Sözü

Akıllı bir adam yalnız kendi tecrübelerinden, çok akıllı bir adam başkalarının da tecrübelerinden yararlanır. (Çin Atasözü)

Bağlantılar

Arşivler