我制作了一个使用imagecreatetruecolour()
创建图片的脚本。然后使用imagettftext()
函数为图像添加一个字母。进行了一些其他更改,最后删除了白色背景并将其另存为PNG文件。整个东西放在一个for循环中,所以它创建250个图像。
我面临的问题是,有时候(250左右的大约10-15)在制作图像后似乎没有做任何事情,所以输出是白色正方形或黑色正方形(正确尺寸)。 / p>
我尝试在其中添加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,但是这是正确的序列 - 或者更确切地说是字母,但有些卡在随机的地方。 -
答案 0 :(得分: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);