2009-05-04 4 views
0

Ich habe eine Sammlung von Schwarz-Weiß-JPEGs auf meinem Server gespeichert. Diese Bilder basieren auf Symbolen, wobei das Symbol eine Sammlung schwarzer Linien auf weißem Hintergrund ist.Überlagern von Farbe auf einem JPEG mit PHP/GD?

Ich versuche, GD zu verwenden, um die schwarze Farbe mit einer anderen Farbe auf der Grundlage einer Variablen zu ersetzen, die bestanden wird. Derzeit ich bin:

Erste das JPEG als: $ image = imagecreatefromjpeg ($ imgURL), einen HEX-Code konvertieren (# FF0000, sagen) durch PHP in RGB,

Und dann diese Variablen zu füttern:

private function colourize_image($image, $colour, $contrast = 0) { 
    if (!$image) { return false; } 

    imagealphablending($image, true); 
    imagesavealpha($image, true); 

    # Convert hex colour into RGB values 
    $r = hexdec('0x' . $colour{0} . $colour{1}); 
    $g = hexdec('0x' . $colour{2} . $colour{3}); 
    $b = hexdec('0x' . $colour{4} . $colour{5}); 

    imagefilter($image, IMG_FILTER_COLORIZE, $r, $g, $b); 
    imagefilter($image, IMG_FILTER_CONTRAST, $contrast); 

    # Return the GD image object 
    return $image; 
} 

Aus irgendeinem Grund funktioniert die Funktion überhaupt nicht (es wird keine neue Farbe überlagern).

Kann mir jemand sagen, wo ich falsch liege?

Vielen Dank.

+0

Wie wird $ color übergeben? Ich habe diese {0} -Notation für den Zugriff auf eine Variable noch nie gesehen. –

+0

Wenn es eine Zeichenfolge wie "FFFFFF" für Weiß ist, sollten Sie eckige Klammern verwenden, nicht geschweifte Klammern. –

Antwort

0

Wenn die Farbe das einzige Problem ist, dann könnte man dies versuchen:

 
     <php> 
     //SNIP 
     $color = preg_replace('/^#/','',$color); //Get rid of "#" if it's there 
     $r = hexdec("0x{$color[0]}{$color[1]}"); 
     $g = hexdec("0x{$color[2]}{$color[3]}");
$b = hexdec("0x{$color[4]}{$color[5]}"); //SNIP </php>

0

Sie die imageistruecolor Funktion verwenden können, ob die JPEG zu finden haben Sie gerade geladen ist wahre Farbe oder Palette- basierend. Wenn es nicht wahr Farbe ist, können Sie ein neues Echtfarbenbild von der gleichen Breite und Höhe, und kopieren das alte Bild über:

$width = imagesx($jpeg); 
$height = imagesy($jpeg); 
$image = imagecreatetruecolor($width, $height); 
imagecopy($jpeg, $image, 0, 0, 0, 0, $width, $height); 

Sie sollten dann in der Lage sein, die neuen Farben anzuwenden.