0

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

我面临的问题是,有时(大约 250 个中的 10-15 个)在制作图像后似乎没有做任何事情,因此输出是白色方块或黑色方块(大小正确)。

我尝试添加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,但是是的,这是正确的顺序 - 或者更确切地说是字母,但有些被卡在随机的地方。-

4

1 回答 1

0

这就是您的代码失败的原因

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);
于 2012-04-29T23:56:24.900 回答