2015-05-18 27 views
2

使用以下脚本,我将文本拆分为句子,并从每个句子动态创建图像。我的for循环没有正确执行。我不懂为什么?图像创建功能只被调用一次,只创建一个图像,尽管文本包含4个不同的句子。该脚本的目的是创建四个图像并将其保存到硬盘中。我需要你的建议。因为代码运行速度不够快,使得time()函数(返回的时间以秒计)给你相同的值的4倍PHP动态图像创建不起作用

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

    } 

?> 

回答

5

所有的图像都得到相同的文件名。所以你覆盖相同的文件4次在这条线:

imagepng($image, "savedimages/" . time() . ".png"); 

作为一种变通方法,您可以使用rand()功能追加一个随机数的唯一性。

imagepng($image, "savedimages/" . time() . "-" . rand() . ".png"); 

更棒的是,使用php的内置tempnam()函数来生成一个唯一的文件名。

+0

亲爱的亚萨,非常好的答案。你拥有一个网站?有联系电子邮件? – user2665522

+0

@ user2665522如果它解决了您的问题,请将此答案标记为正确。谢谢。 – Asaph