Проблема с использованием imagecreatefromjpeg и imagejpeg - PullRequest
1 голос
/ 22 декабря 2009

В соответствии с данным мне заданием я пытаюсь увидеть влияние следующих двух функций php на файл изображения 1. imagecreatefromjpeg 2. imagejpeg

Я загружаю файл, используя HTML, а затем мой php-код выглядит так:

 <?php

 try{
   if(!$image=imagecreatefromjpeg('zee1.jpg')){
      throw new Exception('Error loading image');
   }
   // create text color for jpg image
   if(!$textColor=imagecolorallocate($image,0,255,0)){
      throw new Exception('Error creating text color');
   }
   // include text string into jpg image
   if(!$text=imagestring($image,5,10,90,'This is a sample text
string.',$textColor)){
      throw new Exception('Error creating image text');
   }
   header("Content-type:image/jpeg");
   // display image
   imagejpeg($image, 'zee1After.jpg');
   // free up memory
   imagedestroy($image);
}
catch(Exception $e){
   echo $e->getMessage();
   exit();
}

    ?>

Но когда я делаю это, я получаю следующий вывод:

Неустранимая ошибка: допустимый размер памяти 33554432 байта исчерпан (попытка выделить 10368 байтов) в C: \ Users \ zee \ Documents \ Flex Builder 3 \ CLOUD \ bin-debug \ upload_file.php в строке 3

Размер исходного изображения: 5,136 КБ выдают вышеуказанную ошибку после запуска php.

Но если я попробую другое изображение с размером: 2,752 КБ, оно работает ..

Может кто-нибудь, пожалуйста, помогите мне с этим. Zeeshan

Ответы [ 4 ]

5 голосов
/ 22 декабря 2009

Прежде всего удалите строку header("Content-type:image/jpeg");, там ничего не происходит, поскольку вы используете аргумент имени файла функции imagejpeg().

Во-вторых, чтобы избежать проблем с памятью, вы должны изменить предел памяти, например:

ini_set('memory_limit', -1);

Должен решить ваши проблемы (поместите его в начало файла).

Чтобы восстановить исходный лимит памяти, вы можете добавить следующую строку в конец файла:

ini_restore('memory_limit');

Весь скрипт должен выглядеть примерно так:

<?php

ini_set('memory_limit', -1);

try 
{
    if (!$image = imagecreatefromjpeg('zee1.jpg'))
    {
        throw new Exception('Error loading image');
    }

    // create text color for jpg image
    if (!$textColor = imagecolorallocate($image, 0, 255, 0))
    {
        throw new Exception('Error creating text color');
    }

    // include text string into jpg image
    if (!$text = imagestring($image, 5, 10, 90, 'This is a sample text string.', $textColor))
    {
        throw new Exception('Error creating image text');
    }

    // display image
    imagejpeg($image, 'zee1After.jpg');

    // free up memory
    imagedestroy($image);
}

catch (Exception $e)
{
    echo $e->getMessage();
    exit();
}

ini_restore('memory_limit');

?>
0 голосов
/ 22 декабря 2009

Предупреждение: невозможно изменить заголовок информация - заголовки уже отправлены

Убедитесь, что нет никаких символов перед открывающим тегом PHP; это причина получения этого сообщения об ошибке. Если вы не видите какой-либо символ, это может быть файл, начинающийся с последовательности спецификации, которая представляет собой последовательность символов, которая в файле UTF позволяет понять, закодирован ли файл в формате UTF-8, UTF-16 LE или UTF. -16 бе.

0 голосов
/ 22 декабря 2009

Это потому, что вы выводите текст через эхо. Заголовки не могут быть отправлены снова, потому что они уже были отправлены, чтобы отправить ваш текст. Рассмотрим буферизацию вывода.

Смотрите мой ответ на аналогичный вопрос .

РЕДАКТИРОВАТЬ: Также см. Сообщение Стива об использовании индекса tmp_name в массиве $_FILES.

0 голосов
/ 22 декабря 2009

Вы запрашиваете имя файла, а не путь к файлу. Попробуйте:

$imgname = $_FILES["file"]["tmp_name"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...