2009-05-04 5 views
0

J'ai une collection de JPEG noir et blanc stockés sur mon serveur. Ces images sont basées sur des symboles, où le symbole est une collection de lignes noires sur un fond blanc.Superposition de couleur sur un JPEG avec PHP/GD?

J'essaye d'employer GD pour remplacer la couleur noire avec une autre couleur à la volée basée sur une variable passée. À l'heure actuelle, je suis:

Obtenir le JPEG: l'image $ = imagecreatefromjpeg ($ imgURL), Conversion d'un code HEX (# FF0000, par exemple) en RVB par PHP,

Et puis l'alimentation de ces variables:

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; 
} 

Pour quelque raison, la fonction ne fonctionne pas du tout (elle ne recouvrira pas une nouvelle couleur). Est-ce que quelqu'un peut me dire où je me trompe?

Merci beaucoup.

+0

Comment est passée la couleur $? Je n'ai jamais vu cette notation {0} pour accéder à une variable. –

+0

Si c'est une chaîne comme "FFFFFF" pour le blanc, vous devriez utiliser des crochets, pas des accolades. –

Répondre

0

Si la couleur est le seul problème, vous pourriez essayer ceci:

 
     <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

Vous pouvez utiliser la fonction imageistruecolor pour savoir si le JPEG que vous avez juste chargé est vrai couleur ou Palette- basé. Si ce n'est pas vraie couleur, vous pouvez créer une nouvelle image vraie couleur de la même largeur et la hauteur, et de copier l'ancienne image sur:

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

Vous devriez alors être en mesure d'appliquer les nouvelles couleurs.