[PHP/GD] ImageCreateFromPng *please close*

knebel24

2e5.de
ID: 114209
L
24 April 2006
363
13
So ihrs,
ich hab da mal ein Problem.

Folgende:
ich möchte für einen Datei download eine Absicherung haben, wo der User einen Code eingibit. Dieser Code soll (ähnlich wie der hier bei Klamm) mit Kreisen und Strichen hinterlegt sein.

Ich wüsste jetzt gerne mal was ich flasch mache denn er gibt immer an, dass der Code falsch ist und er kein Bild erstellen kann.

kann mir vielleicht jemand helfen?

mfg.
knebel24

PHP:
require("./config/config.php");
header ("Content-type: image/png");

$id = $_GET["id"];

$code_result = mysql_query("SELECT code FROM tab_log WHERE log_id='$id.'");
$code_data = mysql_fetch_array($code_result);
   
$num = rand(1,3);
$bild = "./bild/bild_$num.png";

$im = imagecreatefrompng($bild);
imagecreate (200, 60) or die ("Kann keinen neuen GD-Bild-Stream erzeugen");

$co1 = rand(140,180);
$co2 = rand(140,180);
$co3 = rand(140,180);
$co4 = 255-$co1;
$co5 = 255-$co2;
$co6 = 255-$co3;

$background_color = ImageColorAllocate ($im, 0, 0, 0);
$text_color = imagecolorallocate ($im, $co1, $co2, $co3);
imagestring ($im, 5,70, 25, $code_data[code], $text_color);
imagepng($im);
 
irgendwie verstehe ich das imagecreate nicht, warum machst du das, wenn du sowieso mit $im weitermachst?
gibt es das bild auch? Mach mal den header raus und gucke was er genau für eine Fehlermeldung ausgibt. Aber zuerst das komische imagecreate raus.

MfG respawner
 
Verstehe das auch nicht so wirklich.

Für evtl. Fehlermeldungen einfach mal deinen Content-Type im Header auskommentieren:
#header ("Content-type: image/png");

Ansonsten sehe ich auch nicht den Sinn von deinem imagecreate, weil du es nicht weiter nutzt, wie respawner schon angemerkt hat. Ansonsten würde ich nicht gebrauchtes (falls das der Fall sein sollte) aus dem Code erstmal rauslassen. Eventuell willst du aber auch die Teile reinkopieren, dann krame doch mal im Manual nach den entsprechenden Funktionen!
 
@knebel24:
Das "### CODE ANFANG ###" kannst du dir sparen. Im Forum haben wir
PHP:
-Tags, da wird der Code sogar schon gehighlighted. Ich hab das mal geändert oben :D

@Problem:
Die [FONT=Courier New]imagecreate()[/FONT]-Zeile löscht du raus, die verschwendet ja nur Resourcen, wenn du das Bild eh nicht benutzt.
Der Fehler liegt zwischen Zeilen 6-8. MySQL gibt sicherlich eine Fehlermeldung raus, weil du keine Fehlerverarbeitung drinhast. Wegen dem [FONT=Courier New]content-type[/FONT]-Header versucht der Browser das Teil als Bild zu interpretieren und scheitert logischerweise daran.

Debugging: Schick einen
[php]//header ("Content-type: image/png");
@header("content-type: text/plain");
Dann siehst du ganz am Anfang die Fehlermeldung.

ToDo: Benutz gleich eine Klasse mit integrierter Fehlerverarbeitung für Datenbankaufrufe oder du musst die Tortur bei jeder mysql_*()-Zeile machen ;)
 
Hi,
ich hab den Fehler gefunden! (es war ein Klassenkamerad!)

der Kerl hat nur die Dateiendung geändert in der Hoffnung, dass es dann eine png-Datei ist. Das ist halt das Problem an Klassenprojekten :D

Schönen Dank für die Hilfe!

mfg.
knebel24


Hier nochmal der Code wie er jetzt ist! :)

PHP:
require("./config/config.php");
@header("content-type: text/plain");

$id = $_GET["id"];

$code_result = mysql_query("SELECT code FROM tab_log WHERE log_id='$id.'");
$code_data = mysql_fetch_array($code_result);
   
$num = rand(1,3);
$bild = "./bild/bild_$num.png";

$im = imagecreatefrompng($bild);


$co1 = rand(140,180);
$co2 = rand(140,180);
$co3 = rand(140,180);
$co4 = 255-$co1;
$co5 = 255-$co2;
$co6 = 255-$co3;

$background_color = ImageColorAllocate ($im, 0, 0, 0);
$text_color = imagecolorallocate ($im, $co1, $co2, $co3);
imagestring ($im, 5,70, 25, $code_data[code], $text_color);
imagepng($im);