[PHP ImageColorSet] Farbverlauf auf bestimmte Farbe anwenden

BadKiss

Mitglied
Huhu :)

heute hab ich nochmals eine kleine Frage an euch :)

Ich hab da so einen tollen Farbverlaufgenerator gefunden: Hier klicken

Ich würde diesen nun gern benutzen, allerdings färbt der mir das komplette Bild ein.
Ich würde gern lediglich eine Farbe mit diesem Verlauf versehen.

#000000 sollte dadurch ersetzt werden.

Hat jmd eine Idee, wie ich das am besten machen könnte?

PHP:
 <?php
error_reporting(1);

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

$w  = max(min(33,$_GET['w']),1);
$h  = max(min(300,$_GET['h']),1);
$r1 = max(min(255,$_GET['r1']),0);
$g1 = max(min(255,$_GET['g1']),0);
$b1 = max(min(255,$_GET['b1']),0);
$r2 = max(min(255,$_GET['r2']),0);
$g2 = max(min(255,$_GET['g2']),0);
$b2 = max(min(255,$_GET['b2']),0);

$s  = array($r1,$g1,$b1);
$e  = array($r2,$g2,$b2);

$image  = imagecreate($w,$h);

for ($i = 0; $i<$h; $i++) 
{
    $l = ImageColorAllocate
              (
                $image,
                max(0,$s[0]-((($e[0]-$s[0])/-$h)*$i)),
                max(0,$s[1]-((($e[1]-$s[1])/-$h)*$i)),
                max(0,$s[2]-((($e[2]-$s[2])/-$h)*$i))
              ); 
    imageline($image, 0, $i, $w, $i, $l);
}

imagePNG($image);
imagedestroy($image);
?>

Das ist der Code, der für mich generiert wurde.
Mir gelingt es allerdings nicht, dass ich dem Verlauf sage, dass ich lediglich #000000 ersetzt haben möchte bzw eingefärbt.

Ich hoffe, ihr versteht, was ich meine und mir kann jmd helfen.

Liebe Grüße,
Bad
 
Zuletzt bearbeitet:
Wo willst du etwas ersetzt haben? Mit diesem Code wird lediglich via GD-Lib ein Image erstellt in dem sich ein Verlauf mit den Werten aus $_GET bildet.
 
Kann gerne mal meinen kompletten Code posten.

Dort möchte ich $rahmen (davon eben #000000) mit dem Farbverlauf ersetzen.

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.

$card ist das Bild, welches in $rahmen (dem Rahmen) eingefügt wird.
Bisher färbe ich den Rahmen immer in eine Farbe um, würde dies nun aber eben gerne mit dem Farbverlauf machen.

Wenn noch iwas unklar sein sollte, dann bitte sagen :)
 
Rahmen

Das grüne #00ff00 wird transparent gemacht und das schwarze #000000 soll eingefärbt werden.
Versteht man so, was ich meine? :)
Also einen Verlauf von oben nach unten bzw von links nach rechts.
 
Ich hoffe ich sag da nichts falsches, da ich selbst erst vor 1 Monat zum ersten mit GD-Lib gearbeitet habe, aber das was du vor hast ist wohl nicht möglich. Ich wüsste jedenfall nicht das es eine Funktion zum maskieren gibt.
 
PHP:
$newcolor = imagecolorexact($rahmen, 0, 0, 0);
imagecolorset($rahmen, $newcolor, $red, $green, $blue);

So färb ich den Rahmen auf jeden Fall in eine Farbe, also alle Teile, die schwarz sind.

Mal sehn, evtl kann mir ja jmd andres sonst helfen, aber danke trotzdem :)
Ich bin der Meinung, dass das eig funktionieren sollte ;)
Ich stell mich wohl nur zu dumm an im Moment ^^
 
Da ersetzt du eine Farbe mit einer Farbe, nicht mit mehreren oder gar einem anderen Image. Es gibt wohl funktionen mit denen man den Inhalt eines solchen Rahmen füllen kann. Den Rahmen selber aber nicht. Jedenfalls hab ich keine gefunden.

edit: Das ist die funktion zum Füllen innerhalt eines Borders: http://de2.php.net/manual/de/function.imagefilltoborder.php
Vielleicht gibt es eine Möglichkeit das ganze umzudrehen.
Als Hintergrund dient dann das Image mit dem Farbverlauf, nachdem die Fläche innerhalb des Borders weiss gefüllt ist könnte man dann vielleicht die Farbe des Borders transparent setzen so das dieser nicht mehr zusehen ist. Ergebnis wäre dann, dass der Hintergund ( der Verlauf ) sichtbar wäre.
 
Zuletzt bearbeitet:
Ich hätte jetzt auch nicht erwartet, dass es eine vorhandene Funktion dafür gibt (also von GDLib direkt).
Aber evtl hat so manch einer sowas schonmal probiert :)
 
Zurück