2010-12-13 5 views
0

Ich habe eine Variable ($output), die auf eine Zeichenfolge festgelegt ist.PHP-Header, Content-Typ: Bild nicht zulässig

Um diese Zeichenfolge ein Bild Ich benutze die PHP: GD Library.

Insbesondere die imagestring() Funktion, die ich mit einer sehr geringen Änderung bin mit:

<?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); 
?> 

Dies funktioniert wie erwartet: Es stellt sich $output in ein Bild.

Also mein Problem ist (oder meine beste Vermutung zumindest):

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

Which, mich nicht zur Ausgabe nach, dass jede html ermöglichen.

Also las ich diese Frage, die asks if you can use two headers, die Sie nicht können, aber the accepted answer empfiehlt, etwa so: <img src="my_img.php" />

Dies wäre natürlich gut, außer ich weiß nicht, wie würde dies meine lösen Probleme seit, da selbst wenn ich die Quelle zu diesem Bild kannte (was ich nicht - also, das wäre meine erste Frage, wie ist der Pfad zum generierten Bild *) würde ich die Tatsache, dass die Kopfzeile ändern ist da und lässt mich keinen Text ausgeben.

Also, ich, wie würden Sie dieses Problem angehen?

Vielen Dank im Voraus!


* Ich denke, dass meine Probleme lösen würde, da ich dies auf einer externen Datei tun konnte, und die rufen Sie einfach das Bild (aber vielleicht nicht, da müsste ich eine Include tun, und dies würde den Header schließen) Wie Sie sehen, bin ich ein bisschen verwirrt. Leider :)


UPDATE:

Ich sehe Also meine Frage war verwirrend, so werde ich etwas mehr Code hinzufügen, um zu sehen, ob dies mein Problem stellt klar, ein bisschen mehr:

<?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> 

Ich möchte $output ein Bild sein, also habe ich versucht, das PHP: GD-Skript oben zu verwenden, aber ich kann nicht in der gleichen Datei wegen der Kopfzeile setzen.

Antwort

3

Sie müssen ein separates PHP-Skript erstellen, das das Image bereitstellt, und dann ein -Tag erstellen, das auf dieses Skript verweist.

Sie können Informationen an das Skript senden, indem Sie den Querystring in der Bild-URL verwenden.

+0

Ok ich denke ich sehe wohin du gehst. – Trufa

+0

+1 - Wo Sie das Bild platzieren möchten, benötigen Sie 'Some alt text'. Da Sie den Inhaltstyp "image/png" bereitstellen, behandelt er das, was von Ihrem Skript als Bild zurückgegeben wird. –

+0

@Ben: Genau. – SLaks

0

HTTP funktioniert nicht so. Wenn Sie image/png-Daten bereitstellen, ist es so, als würden Sie eine PNG-Datei von der Site aus bereitstellen, keine HTML-Datei mit einem Bild darin. Was versuchst du zu erreichen?

0

my_img.php ist keine Quelle für Ihr Bild. Es ist eine Quelle für das Skript, das dieses Bild erzeugt oder es aus der Datei liest und direkt in den Browser ausgibt.Offensichtlich wäre der Ansatz mit img src der beste, weil Sie alle "langweiligen" Implementierungen der angezeigten Bildfolgen hinter den Mechanismen des Browsers verbergen.

1

Zuerst der Pfad.

From the manual:

imagepng (resource $ [, string $ filename [, Qualität int $ [, int $ Filter]]])

Es bedeutet, dass, wenn Sie dies nicht tun Geben Sie ein zweites Argument an (das ist hier der Fall), Sie haben nicht den Pfad zu einer Datei, sondern die Daten der Datei/Bild-Ressource. Die PHP-Datei wird verstehen als eine PNG-Datei durch den Browser dank der Kopfzeile, die Sie geben.

Zweitens:

In Ihrer Seite (dh index.php), können Sie diese wie die

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

und in PHP-Skript hinzufügen könnte myimg.php Sie haben es so :

<?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 trennt Dateien.

1

Sie können das Bild inline mit echo '<img src="data:image/png;base64,'. base64_encode(imagepng($im)) .'" /> anstelle von <img src="my_img.php"> senden.
Legen Sie keinen Content-Type-Header fest! Ihre Ausgabe ist text/html, was Sie nicht ankündigen müssen, da es in den meisten Server-Setups der Standard ist.

3

Morbo sagt: "Windmühlen funktionieren nicht so! Gute Nacht!"

Was bedeutet, dass Sie knacken müssen, wie das alles funktioniert. Dieses Problem weist auf ein grundlegendes Missverständnis Ihrer Tools hin. HTML darf keine Bilder enthalten, es enthält Links zu Bildern. Daher muss Ihr Skript über ein Bild-Tag von einer anderen Seite eingefügt werden. (oder CSS)

Allerdings ist das alles eine gute Sache. Dies bedeutet, dass dieses Skript dynamische Elemente haben kann, die bei jedem Aufruf ein neues Bild erzeugen. Oder dass Ihre Bilder mit einem Kennwort geschützt werden können, sodass nur angemeldete Benutzer sie sehen können.

Es gibt eine Vielzahl von Möglichkeiten, dies zu verwenden. Und sobald Sie erkennen, dass das Bild wie eine Seite zu PHP ist, öffnet dies neue Routen. PHP kann alles ausgeben. Word-Dokumente, Excel, PDF, CSS, sogar JS. All dies kann verwendet werden, um coole Dinge zu tun.

Denken Sie einfach an das Bild als eine separate Seite. Du wirst es verstehen. Es wird einfach in deinen Kopf einrasten. Einer dieser großen Aha-Momente.

+0

Ich sage nicht, dass ich nicht mit einigen grundlegenden Konzepten verwechselt werden sollte, aber in diesem Fall denke ich, dass es eher ein Problem ist, mich selbst auszudrücken. Ich weiß, html kann keine Bilder enthalten :) – Trufa

+0

Also in Ihrer Frage, die ein Tag mit my_img.php drin. Diese Datei enthält Ihr Bildskript. Die Datei, in der sich das a-Tag befindet, ist die richtige Seite. – DampeS8N

+0

einverstanden, aber ich verstehe nicht, wie man es zu verknüpfen, da, wenn ich anrufen muss, würde ich "noch nicht erstellt werden" oder so O denke, schauen Sie auf mein Update. – Trufa

Verwandte Themen