Не удалось создать изображение PHP
Я сделал скрипт, который создает изображение с помощью imagecreatetruecolour()
, Затем он добавляет письмо к изображению, используя imagettftext()
функция. Внесены некоторые другие изменения, и, наконец, белый фон удален и сохранен в виде файла PNG. Все это помещается в цикл for, поэтому он создает 250 изображений.
Проблема, с которой я сталкиваюсь, заключается в том, что иногда (около 10-15 из 250) кажется, что ничего не делается после создания изображения, поэтому на выходе получается либо белый квадрат, либо черный квадрат (правильного размера).
Я пытался добавить sleep()
в это, чтобы видеть, пытался ли он создать их слишком быстро, но проблема все еще сохраняется. Кто-нибудь знает, что может быть причиной этого? Ограничение памяти PHP составляет 128 МБ, так что я не думаю, что это проблема (и это также происходит и в случайных местах, иногда даже первое изображение).
Я почти уверен, что это не было опубликовано ранее, но, честно говоря, я понятия не имел, что я ищу, поэтому я мог искать не в том месте.
//редактировать
Мне не позволено добавлять весь сценарий здесь, к сожалению (политика компании, бла-бла), но я могу загрузить его часть. После дальнейшего изучения я сузил его, чтобы он не выбирал буквы (я выводил несколько переменных в CSV, и этот столбец был пустым для других, которые не работали)
Итак, вот код, который имеет дело с этой частью:
$exp_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRUSTUBWXYZ';
$letterArray = str_split($exp_str);
$randLetter = rand(0,55);
$text = $letterArray[$randLetter];
И та часть, которая объединяет все изображения:
imagettftext($im, $sizeRand, $angleRand, $posX, $posY, $black, $font, $text);
$filename = 'images/'.$counter.'.png';
Также журнал ошибок пуст.
Спасибо людям. Я заметил ошибку сразу после того, как отправил код. Не уверен, откуда я взял эти 55, но да, это правильная последовательность - или, вернее, буква, но некоторые застряли в случайных местах. -
1 ответ
Это причина, по которой ваш код не работал
count($letterArray);
вернется 52
Теперь вы пытаетесь получить
$randLetter = rand(0,55);
Таким образом, случайным образом это сгенерирует недопустимые символы и ваш код потерпит неудачу
использование
$randLetter = rand(0,count($letterArray) - 1);
Образец рабочего кода
$exp_str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRUSTUBWXYZ';
$letterArray = str_split($exp_str);
$randLetter = mt_rand(0,count($letterArray) - 1);
$text = $letterArray[$randLetter];
$font = 'C:\Apache\xampp\htdocs\lab\stockoverflow\verdana.ttf' ;
$im = imagecreate(500, 500);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 500, 500, $white);
imagettftext($im, 70, 0, 0, 100, $black, $font, $text);
imagepng($im);
imagedestroy($im);