2011-08-05 56 views
9

創建的圖像比方說,我有一個看起來像代碼:顯示與imagecreatefromstring

<?PHP 

// 
//... stuff here 
// 

$im = imagecreatefromstring($imageData); 

echo "<img src=" . /* what goes here? */ . "alt=\"the image\" />"; 


// 
// more stuff here 
// 
?> 

我怎麼替換/ *發生的事情嗎? * /如此我的圖像數據將顯示?

謝謝。

回答

10

我該更換什麼/ *這裏有什麼? * /如此我的圖像數據將顯示?

您突出顯示的位置是img HTML-tagDocs的所謂src屬性。該值是所謂的URIDocs

在您的情況下,您希望該URI指向有問題的圖像數據。你沒有指定圖像應該輸出的類型,所以我將在下面的例子中假設它是一個PNG圖像。

您現在需要將圖像數據轉換爲URI。最直接的URI從圖像數據製作的是一個所謂的data: URIWikipedia

<?PHP 

// 
//... stuff here 
// 

$im = imagecreatefromstring($imageData); 

ob_start(); 
imagepng($img); 
$png = ob_get_clean(); 
$uri = "data:image/png;base64," . base64_encode($png); 

echo "<img src=" . $uri /* URI goes here */ . "alt=\"the image\" />"; 

// 
// more stuff here 
// 
?> 

即使這是最直接的方式,它並不總是建議這樣做,因爲圖像數據將與被退回HTML到瀏覽器。如果圖像很大,這通常被認爲是開銷。

除了使用data: URI之外,您還可以在其中放置任何其他URI,例如指向服務器上返回圖像的PHP腳本的HTTP URI。這樣的腳本可以非常簡單:

<?php 
$img = imagecreatefromstring($string); 
header('Content-type: image/png'); 
imagepng($img); 

這與Marc B suggested, see his answer as well相當。

+0

謝謝!輸出緩衝是我需要做的;希望我能給你一個+5! – veeTrain

0

您必須首先將資源保存到文件,或者在另一個請求中使用類似imagepng()的內容輸出它。

有關更多信息,請參閱imagecreatefromstring()文檔。

如果你想使用一個Data URI scheme,可以改爲嘗試這個辦法:

<?php 

// If your image is binary data. use `base64_encode($imageData)`. 
$imageData = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
      . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
      . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
      . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 

echo '<img src="data:image/png;base64,'. $imageData .'" />'; 
0

我認爲你可以做這樣的事情......

$src = "data:image/gif;base64," . $imageData ; 
echo "<img src=\"$src\" alt=\"the image\" />"; 
2
<?php 

$img = imagecreatefromstring($string); 

header('Content-type: image/jpeg'); 
imagejpeg($img); 

應該是所有你需要。在圖像標籤上進行圖像標記時,您需要將圖像輸出到臨時文件並將圖像標籤指向該標籤(這會導致第二個HTTP請求),或使用data url