Не удалось создать изображение 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);
Другие вопросы по тегам