2012-09-04 46 views
0

可能重複:
Headers already sent by PHP同時顯示的字符串和圖像

echo "how"; 

$im = imagecreatetruecolor(120, 20); 
$text_color = imagecolorallocate($im, 233, 14, 91); 
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); 
header('Content-Type: image/jpeg'); 
imagejpeg($im); 
imagedestroy($im); 

我要顯示出在同一時間字符串「如何」和圖像,但我不想將這個圖像保存在文件中。

上面的代碼不起作用。如果我拿走回聲「how」,它工作正常。那麼如果我想同時顯示字符串和圖像,我該如何修改它?

+0

看這個網頁:http://en.wikipedia.org/wiki/Data_URI_scheme。最後,你將要刪除'header('Content-type ...');'並使用base64進行編碼......這裏是一個關於SO的問題,它提供了一個問題示例:http ://stackoverflow.com/questions/1461793/ie6-gd-and-php-image-outputting – jeremy

+2

使用HTML ....... – Petah

回答

1

正如Nile已經指出的那樣,您想要爲圖像使用Data-URI。

使用驗證碼的工作代碼示例如下:

echo "how"; 

$im   = imagecreatetruecolor(120, 20); 
$text_color = imagecolorallocate($im, 233, 14, 91); 
$tmpImg  = tempnam('/tmp', 'image'); 

imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); 
imagejpeg($im, $tmpImg); 
imagedestroy($im); 

echo '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents($tmpImg)) . '">'; 

unlink($tmpImg); 

會發生什麼?它或多或少是你使用的代碼,但是圖像被寫入臨時文件而不是直接發送到瀏覽器 - 這是imagejpeg的第二個參數。 然後,使用Base64編碼將臨時文件的內容放入Data-URI,然後將DataUri設置爲圖像標籤的src。

您將要刪除最後的臨時文件!

如果您想省略臨時文件,可以使用輸出緩衝來捕獲圖像。這看起來像下面這樣:

echo 'how'; 

$im   = imagecreatetruecolor(120, 20); 
$text_color = imagecolorallocate($im, 233, 14, 91); 

imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); 

ob_start(); 
imagejpeg($im); 
imagedestroy($im); 
$image = ob_get_contents(); 
ob_end_clean(); 

echo '<img src="data:image/jpeg;base64,' . base64_encode($image) . '">';