Фотки больших размеров не заливаются.

mTzen

Новичок
Фотки больших размеров не заливаются.

Здраствуйте,
У меня вот такая проблема, имеется код для создание на сервере фоток нужных размеров:

PHP:
$thumb_width = 300;
    if($width > $height)
    {
    $new_im = ImageCreatetruecolor($thumb_width, $thumb_width/4*3);
    $im = imagecreatefromjpeg($source);
    imagecopyresampled($new_im, $im ,0,0,0,0, $thumb_width, $thumb_width/4*3, $width, $height);
    }
    else
    {
    $new_im = ImageCreatetruecolor($thumb_width, $thumb_width/3*4);
    $im = imagecreatefromjpeg($source);
    imagecopyresampled($new_im, $im ,0,0,0,0, $thumb_width, $thumb_width/3*4, $width, $height);
    }
    imagejpeg($new_im, $pic_big, 90);
Заливаю фотку 800кб, размерами 2047/1535
и мне выдает ошибку:

Fatal error: Allowed memory size of 23388608 bytes exhausted (tried to allocate 8192 bytes) in /home/pausch-grupp/data/www/tasks.php on line ...

Помогите с этим разобраться.
Спасибо.
 

zerkms

TDD infected
Команда форума
твой скрипт отжирает больше 23 разрешённых мб памяти.
 

mTzen

Новичок
плохо, а можно как нибуть изменить код, чтобы можно было не парится по поводу размера фоток?
 

MiRacLe

просто Чудо
exec('convert...');

P.S. Разумеется на размер заливаемых фоток это не повлияет, только на потребляемую скриптом память.
 

mTzen

Новичок
MiRacLe, можешь привести другой ресурс, а то у меня этот сайт глючит(*
 

ksnk

прохожий
ini_set('memory_limit','128M');
Вставить туда, где начинается работа с GD.
 

rasebor

Новичок
На php.net натолкнулся на интересное решение. Попробовал - работает!
Фотку брал 4 Мб с лишним, что до этого приводило к ошибке.

PHP:
<?php
//-------------------------------------------------- DEFINE MAXMEM
define ("MAXMEM", 32*1024*1024);  //--- memory limit (32M) ---

//-------------------------------------------------- ENOUGH MEMORY ?
function enoughmem ($x, $y, $rgb=3) {
    return ( $x * $y * $rgb * 1.7 < MAXMEM - memory_get_usage() );
}

//-------------------------------------------------- SIMPLE EXAMPLE
list ($x, $y) = @getimagesize ('your_img.jpg');  //--- get size of img ---
if (enoughmem($x,$y)) {
    $img = @imagecreatefromjpeg ('your_img.jpg');  //--- open img file ---
    $thumb = 200;  //--- max. size of thumb ---
    if ($x > $y) {
        $tx = $thumb;  //--- landscape ---
        $ty = round($thumb / $x * $y);
    } else {
        $tx = round($thumb / $y * $x);  //--- portrait ---
        $ty = $thumb;
    }
    if (enoughmem($tx,$ty)) {
        $thb = imagecreatetruecolor ($tx, $ty);  //--- create thumbnail ---
        imagecopyresampled ($thb,$img, 0,0, 0,0, $tx,$ty, $x,$y);
        imagejpeg ($thb, 'your_thumbnail.jpg', 80);
        imagedestroy ($thb);
    }
    imagedestroy ($img);
}

//--------------------------------------------------
//--- to check the memory working with           ---
//--- b/w-image or gif use:                      ---
//--------------------------------------------------
$check = enoughmem ($x, $y, 1);
?>
 
Сверху