2010-12-13 60 views
0

我有一個變量($output),它被設置爲一個字符串。PHP標頭,內容類型:圖像不允許文字

要使用此字符串圖片我正在使用PHP: GD Library

特別是imagestring()功能,我使用的是一個非常輕微的修改,其中:

<?php 
// Create a 100*30 image 
$im = imagecreate(100, 30); 

// White background and blue text 
$bg = imagecolorallocate($im, 255, 255, 255); 
$textcolor = imagecolorallocate($im, 0, 0, 255); 

// Write the string at the top left 
imagestring($im, 5, 0, 0, $output, $textcolor); #here is my string $output 

// Output the image 
header('Content-type: image/png'); 

imagepng($im); 
imagedestroy($im); 
?> 

這是按預期工作:原來$output成圖像。

所以,我的問題是(或我最好的猜測至少):

header('Content-type: image/png'); 

其中,不允許我後輸出的任何HTML。

所以我讀了這個問題,這asks if you can use two headers,你可以不要,但the accepted answer建議,是這樣的:<img src="my_img.php" />

當然,這將是罰款,但我不知道怎麼會變成這樣解決我的因爲即使我知道這個圖像的來源(,我不知道 - 所以,這將是我的第一個問題,生成的圖像的路徑是什麼*)我不會改變這個事實,即標題在那裏,不讓我輸出文字。

那麼,我該如何解決這個問題?

在此先感謝!


*我想這將解決我的問題,因爲我能做到這一點對一個外部文件,而只是調用圖像(但也許不是,因爲我會做一個包括這將包括頭太),因爲你看到我有點困惑。對不起:)


UPDATE:

所以,我看到我的問題混淆了,所以我會添加一些更多的代碼,看是否能澄清我的問題有點多:

<?php 

$x = mt_rand(1,5); 
$y = mt_rand(1,5); 

function add($x, $y) { return $x + $y; } 
function subtract($x, $y) { return $x - $y; } 
function multiply($x, $y) { return $x * $y; } 

$operators = array(
    'add', 
    'subtract', 
    'multiply' 
    ); 

$rdno = $operators[array_rand($operators)]; 

$result = call_user_func_array($rdno, array($x, $y)); 
session_start(); 
$_SESSION['res'] = $result; 

if ($rdno == "add") { 
    $whato = "+"; 
}elseif ($rdno == "subtract") { 
    $whato = "-"; 
} else { 
    $whato = "*"; 
} 
$output = $x . $whato . $y . " = "; 
?> 
<form name="input" action="check.php" method="post"> 
<input type="text" name="result" /> 
<input type="submit" value="Check" /> 
</form> 

我想$output是一個圖像所以這讓我試圖使用上面的PHP:GD腳本,但由於標題,我無法放入同一個文件。

回答

3

您需要製作一個單獨的PHP腳本來爲圖像提供服務,然後製作一個<img>標籤,指向該腳本。

您可以使用圖像URL中的查詢字符串將信息發送到腳本。

+0

好吧,我想我明白你要去哪裏。 – Trufa 2010-12-13 16:00:14

+0

+1 - 你想放置圖像的位置需要'Some alt text'。因爲您正在使用'image/png'內容類型,所以它會將從腳本返回的任何內容視爲圖像。 – 2010-12-13 16:02:35

+0

@Ben:的確如此。 – SLaks 2010-12-13 16:03:45

0

HTTP不能這樣工作。當你提供圖片/ PNG數據時,就好像你正在從網站提供PNG文件,而不是一個帶有圖片的HTML文件。你想達到什麼目的?

0

my_img.php不是您的圖片的源代碼。它是生成該圖像的腳本或從文件中讀取並直接輸出到瀏覽器的源代碼。顯然,使用img src的方法是最好的,因爲你會隱藏所有在瀏覽器機制後面顯示圖像字符串的「無聊」實現。

1

首先,路徑。

From the manual

imagepng(資源$圖像[,字符串$文件名[摘要$質量[摘要$過濾器]]])

這意味着,如果你不這樣做給出第二個參數(這裏就是這種情況),你沒有文件的路徑,而是文件/圖像資源的數據。感謝您提供的頭文件,php文件將理解爲作爲瀏覽器的png文件。

二:

在您的網頁(即的index.php),你可以像

<img src="myimg.php?output=[...]" /> 

,並在您的PHP腳本添加此myimg.php你有像這樣:

<?php 
$output = $_GET['output'] // getting your text 

// Create a 100*30 image 
$im = imagecreate(100, 30); 

// White background and blue text 
$bg = imagecolorallocate($im, 255, 255, 255); 
$textcolor = imagecolorallocate($im, 0, 0, 255); 

// Write the string at the top left 
imagestring($im, 5, 0, 0, $output, $textcolor); #here is my string $output 

// Output the image 
header('Content-type: image/png'); 

imagepng($im); 
imagedestroy($im); 
?> 

2分隔文件。

1

可以用echo '<img src="data:image/png;base64,'. base64_encode(imagepng($im)) .'" />內嵌圖像發送圖像替換<img src="my_img.php">的圖片。
請勿設置內容類型標題!你的輸出是text/html,你不需要宣佈,因爲它是大多數服務器設置的默認設置。

3

Morbo說:「風車不會那樣工作!晚安!」

這意味着您需要了解這一切的工作原理。這個問題指向你對你的工具有一個基本的誤解。 HTML不能包含圖像,它包含指向圖像的鏈接。因此,您的腳本需要通過圖像標記從另一個頁面中包含。 (或CSS)

但是,這一切都是件好事。這意味着這個腳本可以有動態元素,每次調用它時都會產生一個新圖像。或者它可以密碼保護你的圖像,所以只有登錄的用戶才能看到它。

有很多方法可以使用它。一旦你意識到圖像就像是一個PHP頁面,這將打開新的路線。 PHP可以輸出任何東西。 Word文檔,Excel,PDF,CSS,甚至JS。所有這些都可以用來做很酷的事情。

只要將圖像視爲一個單獨的頁面。你會得到它。它只會在你的腦海中點擊進入。其中一個'aha'時刻。

+0

我並不是說我可能不會與一些基本概念混淆,但在這種情況下,我認爲更多的是表達自己的問題。我知道HTML不能包含圖像:) – Trufa 2010-12-13 16:13:47

+0

所以在你的問題,一個標籤my_img.php在它。該文件包含您的圖像腳本。標籤所在的文件是適當的頁面。 – DampeS8N 2010-12-13 16:18:04

+0

同意,但我不知道如何鏈接到它,因爲當我不得不打電話給它時,我會「還沒有被創建」,所以我想我的更新。 – Trufa 2010-12-13 16:24:48