使用以下脚本,我将文本拆分为句子,并从每个句子动态创建图像。我的 for 循环没有正确执行。我不懂为什么?尽管文本包含 4 个不同的句子,但图像创建函数仅被调用一次,仅创建一张图像。该脚本的目的是创建四个图像并将它们保存到硬盘驱动器中。我需要你的建议。
<?php
$text = "Hello PHP! some sentences. very difficult, yes? that's for sure!?!";
$chunks = preg_split('#[\r\n]#', $text, -1, PREG_SPLIT_NO_EMPTY);
foreach($chunks as $val)
{
preg_match_all('#(?:\s[a-z]\.(?:[a-z]\.)?|.)+?[.?!]+#i', $val, $paragraph);
foreach($paragraph[0] as $val)
{
$sentences[] = ltrim($val);
}
}
$sentencesCount = count($sentences);
for ($i=0; $i <$sentencesCount ; $i++)
{
//$value = $sentences[$i];
//echo $value . "<br />";
$image = imagecreatetruecolor(200, 50);
imagefilledrectangle($image, 0, 0, 199, 49, 0xFFFFFF); //white
$fontfile = 'verdana.ttf';
imagefttext($image, 20, 0, 20, 35, 0x000000, $fontfile, $sentences[$i]);
header('Content-type: image/png');
imagepng($image);
//Save the image after the current timestamp.
imagepng($image, "savedimages/" . time() . ".png");
//Clean up.
imagedestroy($image);
}
?>
最佳答案
所有图像都获得相同的文件名,因为代码运行速度足够快,使得 time()
函数(返回以秒为单位的时间)给你相同的值 4 次。因此,您将在这一行中覆盖同一个文件 4 次:
imagepng($image, "savedimages/" . time() . ".png");
作为解决方法,您可以使用 rand()
附加随机数以确保唯一性。功能。
imagepng($image, "savedimages/" . time() . "-" . rand() . ".png");
更好的是,使用 php 的内置 tempnam()
函数生成唯一的文件名。
关于PHP 动态图像创建不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30308968/