2015-05-18 59 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