PHP 映像创建失败


PHP Image Creation failing

我制作了一个脚本,使用 imagecreatetruecolour() 创建图像。然后,它使用 imagettftext() 函数向图像添加一个字母。进行了一些其他更改,最后删除了白色背景并将其另存为PNG文件。整个事情被放在一个 for 循环中,所以它创建了 250 张图像。

我面临的问题是,有时(大约 15 个中的 250 个(在制作图像后似乎无法执行任何操作,因此输出是白色正方形或黑色正方形(大小正确(。

我尝试在其中添加sleep(),看看它是否试图太快地创建它们,但问题仍然存在。有人知道是什么原因造成的吗?PHP 内存限制为 128MB,所以我认为这不是问题所在(它也会发生随机位置,有时甚至是第一个图像(。

我很确定这以前没有发布过,但公平地说,我不知道我要搜索什么,所以我可能找错了地方。


//编辑

可悲的是,我不允许在这里添加整个脚本(公司政策等等(,但我可以上传其中的一些内容。经过进一步调查,我将其缩小到不选择字母(我将几个变量输出到 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,但是是的,这是正确的顺序 - 或者更确切地说是字母,但有些卡在随机位置。-

这就是代码失败的原因

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);