Intereting Posts

Проблема с использованием imagecreatefromjpeg и imagejpeg

В соответствии с заданием, данным мне, я пытаюсь увидеть эффекты следующих двух функций 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 KB It Works ..

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

Прежде всего, снимите header("Content-type:image/jpeg"); line, он ничего не делает с тех пор, как вы используете аргумент filename функции 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'); ?> 

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

 $imgname = $_FILES["file"]["tmp_name"]; 

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

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

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

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

EDIT: Кроме того, см. Сообщение Стива об использовании индекса $_FILES массиве $_FILES .