Question

J'ai l'image comme ceci (c'est un graphique):

 Graphique du commerce de l'or
(source: kitconet.com )

Je veux changer les couleurs pour que le blanc soit en noir, la ligne du graphique en bleu clair, etc. Est-il possible d'obtenir des résultats avec GD et PHP?

Était-ce utile?

La solution

Ceci remplacera la couleur blanche par le gris

$imgname = "test.gif";
$im = imagecreatefromgif ($imgname);

$index = imagecolorclosest ( $im,  255,255,255 ); // get White COlor
imagecolorset($im,$index,92,92,92); // SET NEW COLOR

$imgname = "result.gif";
imagegif($im, $imgname ); // save image as gif
imagedestroy($im);

 entrez la description de l'image ici

Autres conseils

J'ai eu du mal à faire fonctionner cette solution. L'image ne peut pas être une image en vraies couleurs. Convertissez-le d'abord avec imagetruecolortopalette ();

$imgname = "test.gif";
$im = imagecreatefromgif ($imgname);

imagetruecolortopalette($im,false, 255);

$index = imagecolorclosest ( $im,  255,255,255 ); // get White COlor
imagecolorset($im,$index,92,92,92); // SET NEW COLOR

$imgname = "result.gif";
imagegif($im, $imgname ); // save image as gif
imagedestroy($im);

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

function hexLighter($hex, $factor = 30) {
    $new_hex = '';

    $base['R'] = hexdec($hex{0}.$hex{1});
    $base['G'] = hexdec($hex{2}.$hex{3});
    $base['B'] = hexdec($hex{4}.$hex{5});

    foreach ($base as $k => $v) {
        $amount = 255 - $v;
        $amount = $amount / 100;
        $amount = round($amount * $factor);
        $new_decimal = $v + $amount;

        $new_hex_component = dechex($new_decimal);

        $new_hex .= sprintf('%02.2s', $new_hex_component);
    }

    return $new_hex;
}

// Sanitize/Validate provided color variable
if (!isset(

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

<*>GET['color']) || strlen(

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

<*>GET['color']) != 6) { header(

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

<*>SERVER['SERVER_PROTOCOL'] . ' 400 Bad Request', true, 400); exit(0); } if (file_exists( "cache/{

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

<*>GET['color']}.png" )) { header( 'Content-Type: image/png' ); readfile( "cache/{

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

<*>GET['color']}.png" ); exit(0); } // Desired final size of image $n_width = 50; $n_height = 50; // Actual size of source images $width = 125; $height = 125; $image = imagecreatetruecolor($width, $height); imagesavealpha($image, true); imagealphablending($image, false); $n_image = imagecreatetruecolor($n_width, $n_height); imagesavealpha($n_image, true); imagealphablending($n_image, false); $black = imagecolorallocate($image, 0, 0, 0); $transparent = imagecolorallocatealpha($image, 255, 255, 255, 127); imagefilledrectangle($image, 0, 0, $width, $height, $transparent); $layers = array(); $layers_processed = array(); $layers[] = array( 'src' => 'layer01.gif', 'level' => 0 ); // Border $layers[] = array( 'src' => 'layer02.gif', 'level' => 35 ); // Background $layers[] = array( 'src' => 'layer03.gif', 'level' => 100 ); // White Quotes foreach ($layers as $idx => $layer) { $img = imagecreatefromgif( $layer['src'] ); $processed = imagecreatetruecolor($width, $height); imagesavealpha($processed, true); imagealphablending($processed, false); imagefilledrectangle($processed, 0, 0, $width, $height, $transparent); $color = hexLighter(

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

<*>GET['color'], $layer['level'] ); $color = imagecolorallocate($image, hexdec( $color{0} . $color{1} ), hexdec( $color{2} . $color{3} ), hexdec( $color{4} . $color{5} ) ); for ($x = 0; $x < $width; $x++) for ($y = 0; $y < $height; $y++) if ($black === imagecolorat($img, $x, $y)) imagesetpixel($processed, $x, $y, $color); imagecolortransparent($processed, $transparent); imagealphablending($processed, true); array_push($layers_processed, $processed); imagedestroy( $img ); } foreach ($layers_processed as $processed) { imagecopymerge($image, $processed, 0, 0, 0, 0, $width, $height, 100); imagedestroy( $processed ); } imagealphablending($image, true); imagecopyresampled($n_image, $image, 0, 0, 0, 0, $n_width, $n_height, $width, $height); imagealphablending($n_image, true); header( 'Content-Type: image/png' ); imagepng( $n_image, "cache/{

Je sais que c'est tard et après coup, mais j'ai mis en place un script qui le fera à une échelle légèrement plus grande. J'espère que quelqu'un qui trouvera ce post pourra l'utiliser. Il faut un certain nombre d’images source composées de couches monochromes (à vous de choisir). Vous lui fournissez une couleur source et la teinte de chaque calque et le script renvoie une image composite (avec une transparence totale) colorée spécifiquement pour le code hexadécimal fourni.

Découvrez le code ci-dessous. Vous trouverez une explication plus détaillée sur mon blog .

<*>GET['color']}.png" ); imagepng( $n_image ); // Free up memory imagedestroy( $n_image ); imagedestroy( $image );

Je n'ai pas essayé moi-même, mais vous pouvez consulter la fonction imagecolorset () dans la bibliothèque GD Produit un remplissage de couleur semblable à un effet pouvant aider à l’arrière-plan blanc.

Vous pouvez essayer la fonction imagefilter http://lv.php.net/imagefilter - mais cela ne vous donnera pas l’accès direct pour remplacer une couleur par une autre, il vous suffira de changer les composants r / g / b.

Une solution de très bas niveau pourrait être implémentée à l'aide d'imagesetpixel http://nl2.php.net/imagesetpixel pour définir les nouvelles valeurs de pixel.

IMG_FILTER_NEGATE: Inverse toutes les couleurs de l'image.

http://www.php.net/manual/en/function. imagefilter.php

Est-ce que cela pourrait être une solution?

L’approche lente mais sûre, itérant sur chaque pixel.

function ReplaceColour($img, $r1, $g1, $b1, $r2, $g2, $b2)
{
    if(!imageistruecolor($img))
        imagepalettetotruecolor($img);
    $col1 = (($r1 & 0xFF) << 16) + (($g1 & 0xFF) << 8) + ($b1 & 0xFF);
    $col2 = (($r2 & 0xFF) << 16) + (($g2 & 0xFF) << 8) + ($b2 & 0xFF);

    $width = imagesx($img); 
    $height = imagesy($img);
    for($x=0; $x < $width; $x++)
        for($y=0; $y < $height; $y++)
        {
            $colrgb = imagecolorat($img, $x, $y);
            if($col1 !== $colrgb)
                continue; 
            imagesetpixel ($img, $x , $y , $col2);
        }   
}

Je ne suis au courant d'aucune fonction prédéfinie. Mais je suppose que vous pouvez parcourir tous les pixels de l'image et changer sa couleur ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top