2009-12-10 2 views
1

La fonction ci-dessous est conçu pour prendre un hexagone d'entrée (avec ou sans le préfixe « # ») et appliquer la mise à jour de la couleur à la partie de l'image entre startPixel et endPixel.Convert Hex RGB pour la fonction imagegif

Je peux obtenir la fonction pour fonctionner correctement sur les tests localhost quand (1) fournissant rouge, vert, bleu et (2) exécutant le fichier directement comme un stand alone (ie, en sauvegardant simplement le contenu de la fonction dans un fichier et l'exécuter).

Cependant, j'ai deux problèmes que je ne peux pas sembler résoudre. (1) Je dois passer dans un hex et obtenir la fonction pour travailler sans avoir besoin de codes rgb durs et (2) J'ai besoin de la fonction pour travailler dans mon fichier functions.php dans wordpress tout en sauvegardant mes options de thème. Je reçois une erreur «Échec de l'ouverture du flux» chaque fois que j'essaie d'appeler la fonction lors de la sauvegarde.

`fonction:

function set_theme_color($hex) 
    { 
    //hexToRGB($hex); DOES NOT WORK. ALWAYS RETURNS BLACK 
    $token = "images/sidebar-bg"; 

    $red = 0; 
    $green = 0; 
    $blue = 202; 

    $startPixel = 601; 
    $endPixel = 760; 

    $img = imagecreatefromgif('images/sidebar-bg.gif'); 

    $color = imagecolorallocate($img, $red, $green, $blue); 

    for ($i = $startPixel-1; $i < $endPixel; $i++) 
    { 
     imagesetpixel($img, $i, 0, $color); 
    } 

    imagegif($img, $token.'.gif'); 
    } 

    function hexToRGB ($hexColor) 
    { 
    $output = array(); 
    $output['red'] = hexdec($hexColor[0].$hexColor[1]); 
    $output['green'] = hexdec($hexColor[2].$hexColor[3]); 
    $output['blue'] = hexdec($hexColor[4].$hexColor[5]); 

    return $output; 
    } 

    set_theme_color('#cccccc'); 

`

Répondre

2

Votre fonction hexToRGB ne prend pas les possibilités du signe # en compte. Pour l'analyse des codes de couleur, j'utiliser une expression régulière:

function hexToRGB ($hexColor) 
{ 
    if(preg_match('/^#?([a-h0-9]{2})([a-h0-9]{2})([a-h0-9]{2})$/i', $hexColor, $matches)) 
    { 
     return array(
      'red' => hexdec($matches[ 1 ]), 
      'green' => hexdec($matches[ 2 ]), 
      'blue' => hexdec($matches[ 3 ]) 
     ); 
    } 
    else 
    { 
     return array(0, 0, 0); 
    } 
} 

Votre ne peut pas erreur de flux ouvert est très probablement dû à des autorisations de fichiers. Assurez-vous d'accorder le mode d'autorisation 777 sur le fichier dans lequel vous essayez d'écrire.

+0

Merci Jon, je suis encore en train noir de la conversion hexagonale. Comment puis-je répercuter les valeurs renvoyées par la fonction? –

+0

Comment appelez-vous hexToRGB? –

+0

OK, quand j'utilise var_dump (hexToRGB ("cccccc")) il retourne ce qui semble être le jeu de résultats approprié ... array (3) {["red"] => int (204) ["green" ] => int (204) [ "bleu"] => int (204)} Cependant, je suis encore en train noir de la conversion des couleurs spot. Je ne suis pas sûr que ma fonction set_image_color exécute correctement la conversion rgb. Pouvez-vous regarder en arrière à la fonction set_theme_color et laissez-moi savoir ce que je suis absent? –