2009-08-18 3 views
1

Мне было интересно, если кто-нибудь знает, как я могу удалить или заменить эти раздражающие N над L (я предполагаю, что означает newline) из моей строки php, прежде чем печатать их на изображении.NL char при использовании imagestring в php

текст выглядит this

любая помощь высоко ценится, как я потратил часы на этой маленькой проблемы ...

<?php 
exec('/usr/games/fortune -s', $fortune); 
for($i = 0; $i <= count($fortune); $i++) { 
    $text = "$text $fortune[$i]"; 
} 
$image = imagecreatefrompng("rex.png"); 
$color = imagecolorallocate($image, 0, 0, 0); 
$newtext = wordwrap($text, 35, "\n", true); 
$newertext2 = explode ("\n", $newtext); 
imagestring ($image, 3, 0, 0, $newertext2[0], $color); 
imagestring ($image, 3, 0, 11, $newertext2[1], $color); 
imagestring ($image, 3, 0, 22, $newertext2[2], $color); 
imagestring ($image, 3, 0, 33, $newertext2[3], $color); 
imagestring ($image, 3, 0, 44, $newertext2[4], $color); 
imagestring ($image, 3, 0, 55, $newertext2[5], $color); 
imagestring ($image, 3, 0, 66, $newertext2[6], $color); 
imagestring ($image, 3, 0, 77, $newertext2[7], $color); 
header("Content-type: image/png"); 
imagepng($image); 
?> 

ответ

2
$newertext2 = explode ("\n", $newtext); 
imagestring ($image, 3, 0, 0, $newertext[0], $color); 

Вы не должны печатать буквы в newertext2 вместо newertext?

+0

heh, да, я только что сделал это редактирование, прежде чем отправил и еще не сохранил его. редактирование сейчас. – austin

+0

также, это не имеет ничего общего с проблемой, которую я испытываю. просто я не смотрю до того, как я напишу. – austin

0

Поздний ответ:

Я узнал, что каждый символ пробела, кроме новой линии и пространства заменяется символом «NL». например знак табуляции.

Решение может заменить их следующим образом:

preg_replace all spaces

Конечно, вы должны заменить пробелом вместо подчеркивания;)

0

Вот функция для записи содержимого с помощью уважая пробелы.

Эта функция не будет превышать пределы размеров изображения. Если новая строка не может быть добавлена ​​целиком за один раз, она будет взорвана в самых маленьких строках.

/** 
* @author Booteille 
* 
* @param resource $image 
* @param int $font 
* @param int $x 
* @param int $y 
* @param string $string 
* @param int $color 
*/ 
function whitespaces_imagestring($image, $font, $x, $y, $string, $color) { 
    $font_height = imagefontheight($font); 
    $font_width = imagefontwidth($font); 
    $image_height = imagesy($image); 
    $image_width = imagesx($image); 
    $max_characters = (int) ($image_width - $x)/$font_width ; 
    $next_offset_y = $y; 

    for($i = 0, $exploded_string = explode("\n", $string), $i_count = count($exploded_string); $i < $i_count; $i++) { 
     $exploded_wrapped_string = explode("\n", wordwrap(str_replace("\t", " ", $exploded_string[$i]), $max_characters, "\n")); 

     for($j = 0, $j_count = count($exploded_wrapped_string); $j < $j_count; $j++) { 
      imagestring($image, $font, $x, $next_offset_y, $exploded_wrapped_string[$j], $color); 
      $next_offset_y += $font_height; 

      if($next_offset_y >= $image_height - $y) { 
       return; 
      } 
     } 
    } 
}