Probleme mit GDLIB ImageColorSet und ImageTTFText

BadKiss

Mitglied
Hallo alle zusammen,

ich habe schon seit einigen Wochen (wenn nicht schon Monaten) dieses Problem.

Ich habe ein kleines System gebastelt, bei dem man Bilder hochladen kann und diese werden in einen Rahmen eingefügt.
Habe dies mit PHP GDLIB umgesetzt.
Der Rahmen soll dann anhand einer angegebenen Farbe umgefärbt werden!

Ansich funktioniert auch alles perfekt, bei mir.

Wenn nun andere Personen Bilder hochladen, dann funktioniert das Färben des Rahmens nicht richtig.
Bei manchen Bildern wird es richtig gemacht, bei anderen widerrum total falsch.

So wäre es richtig: 1 || 2
So wird es leider angezeigt: 1 || 2

Jeweils richtig und falsch.

Ich hoffe, ihr könnt meinem Problem folgen :(

Um es "richtig" zu machen muss ich im Moment alle Dateien abspeichern, in Photoshop öffnen, kopieren, neues Dokument erstellen, einfügen und alte Datei überspeichern.
Dann funktioniert es. Allerdings ist das sehr aufwendig, wenn es über 50 Dateien sind =/

Ich hoffe, von euch hat da jmd eine Lösung.
Wenn ihr den Code sehen wollt, dann sagt bitte bescheid (ich weiß eben leider auch nicht genau, ob das ein PHP-Problem ist, also vom Code her, oder ob es an den Dateien selbst liegt und ob man das iwie mit PHP umgehen kann!).

Liebe Grüße,
BadKiss
 
Zuletzt bearbeitet:
Hi,
schätze jetzt erstmal das es daran liegt das du gif verwendest und gif-images können nicht mehr als 256 Farben beinhalten.
Ich empfehle dir das ganze im PNG-Format zu gestalten.
Ansonsten einfach mal Code posten pls ;)

greetz
 
Zuletzt bearbeitet:
Ich benutze gif ja, aber daran kann es ja eig doch nicht liegen, wenn es bei mir funktioniert aber bei andren nicht, die es genauso speichern oder!?

Hier mal der Code:
PHP:
$sql = "SELECT * FROM sets WHERE sets_name = '".$id."'";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);

$setname = $row['sets_name'];
$zahl = $number;
if($zahl < 10) {
  $zahl = '0'.$zahl;
} else {
  $zahl = ''.$zahl;
}

$sql_e = "SELECT * FROM sets_card_extra WHERE sets_card_extra_sets_id = ".$row['sets_id']."";
$result_e = mysql_query($sql_e) OR die(mysql_error());
$row_e = mysql_fetch_assoc($result_e);

if(mysql_num_rows($result_e)) {
  $carde = explode(';',$row_e['sets_card_extra_name']);
	$set = strtoupper($carde[$number-1]);
} else {
	$set = strtoupper($setname).' #00';
}

ob_end_flush();
header("Content-Type: image/gif");

$image = imagecreate(114,66);
if($row['sets_cat_name'] == 'Special') {
  $rahmen = ImageCreateFromGIF("/html/cards/special.gif");
} elseif($row['sets_cat'] == 12) {
  $rahmen = ImageCreateFromGIF("/html/cards/puzzle.gif");
} else {
  $rahmen = ImageCreateFromGIF("/html/cards/card.gif");
}
if($row['sets_ucat_name'] == 'Puzzle') {
  $card = ImageCreateFromGIF("/cards/image/cards/".$row['sets_name']."/".$row['sets_name'].$number.".gif");
  ImageCopy($image, $card, 0, 0, 0, 0, 114, 66);
} else {
  $card = ImageCreateFromGIF("/cards/image/cards/".$row['sets_name']."/".$row['sets_name'].$number.".gif");
  ImageCopy($image, $card, 3, 3, 0, 0, 108, 54);
}

$hex = $row['sets_color'];
$r = substr($hex, 0, 2);
$g = substr($hex, 2, 2);
$b = substr($hex, 4, 2);
$red = hexdec($r);
$green = hexdec($g);
$blue = hexdec($b);

$Textfarbe = ImageColorAllocate($image, $red, $green, $blue);

$newcolor = imagecolorexact($rahmen, 0, 0, 0);
imagecolorset($rahmen, $newcolor, $red, $green, $blue);

ImageCopy($image,$rahmen,0,0,0,0,114,66);

$font = dirname($_SERVER["SCRIPT_FILENAME"]) . "/SG10f";

if($row['sets_ucat_name'] == 'Puzzle') {
  ImageTTFText($image, 6, 0, 3, 64, $Textfarbe, $font, '#'.$zahl);
} else {
  $size = ImageTTFBBox(6, 0, $font, $set);
  $x = (118-($size[2]-$size[0]))/2;
  ImageTTFText($image, 6, 0, $x, 64, $Textfarbe, $font, $set);
}

ImageGif($image);
ImageDestroy($image);

Die Pfade hab ich etwas geändert, sonst steht alles genauso drin.

Auf PNG kann ich nicht mehr "umsteigen", da ich sonst über 8.000 Dateien von Gif in Png umwandeln müsste.. ^^"
 
An deinem Code kann ich nichts entdecken was ich nicht auch so schreiben würde^^

versuch mal statt:
PHP:
header("Content-Type: image/gif");
...
$image = imagecreate(114,66);
...
ImageGif($image);
-
PHP:
header("Content-Type: image/png");
...
$image = imagecreatetruecolor(114, 66);
...
ImagePNG($image);
wenns daran nicht liegt kann ich dir leider nicht weiter helfen :(
Für mich siehts halt so aus als würden mehr als 256 Farben bönitgt werden.
Du musst die GIF-Images ja nicht in PNG ändern sondern nur die GDlib Ausgabe, ein Versuch ists Wert :P
 
Zuletzt bearbeitet:
Das hatte ich soweit probiert, allerdings hab ich nicht daran gedacht, dass ich imagecreatetruecolor statt imagecreate schreibe, nun scheint das zu funktionieren :D

Dankeschön, endlich hab ich das Problem beseitigt :)

Nochmal ein riesiges Dankeschön
 
Zurück