PDA

View Full Version : [PHP] cambiare colori di un file .gif


mfonz85
28-04-2007, 14:05
Ciao a tutti,
sto cercando un sistema per cambiare colori dinamicamente ad un'immagine .gif, che altro non è che un'immagine 200x50 con sfondo bianco, e immagine nera al centro.
Vorrei creare una pagina php che cambi colori dinamicamente all'immagine con una sintassi del tipo

elabora.php?image=immagine.gif&r=255&g=0&b=0&bg=000000

dove
- image: nome immagine
- r: canale rosso (rgb)
- g: canale verde (rgb)
- b: canale blu (rgb)
- bg: colore esadecimale sfondo

Ho già trovato più di 1 script in giro per la rete, ma invece di cambiarmi il colore nero mi cambiano il colore bianco!
C'è qualcuno che mi sa aiutare con un pezzo di codice e/o un link?
Grazie anticipatamente

Edit: sto provando questo codice, ma il risultato è un'immagine completamente rossa! ma non è possibile!


<?php
$im = ImageCreateFromGif("020bn2.gif");
$width = imagesx($vim);
$height = imagesy($vim);

for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$rgb = ImageColorAt($im, $x, $y);
$colors = imagecolorsforindex($im, $rgb);
if($colors["red"] == 0 && $colors["green"] == 0 && $colors["blue"] == 0 && $colors["alpha"] == 0) {
$newCol = imagecolorallocate($im, 255, 0, 0);
imagesetpixel($im, $x, $y, $newCol);
}
}
}
imagegif($im);
?>

mfonz85
29-04-2007, 20:19
Se dovesse servire a qualcuno....ho risolto così:

Script che prende un'immagine bianca e nera, e sostituisce il colore nero e bianco con altri colori dati tramite metodo GET.

formato metodo GET: script.php?image=immagine.gif&r=[0->255]&g=[0->255]&b=[0->255]&bg=[000000->FFFFFF]

r,g,b sono i canali del nuovo colore da assegnare al nero. Bg è invece il nuovo colore esadecimale da assegnare al bianco.


<?php
$imageName = $_GET['image'];

$red = $_GET['r'];
$green = $_GET['g'];
$blue = $_GET['b'];

$newBg = rgb2hex2rgb($_GET['bg']);
$bred = $newBg[0];
$bgreen = $newBg[1];
$bblue = $newBg[2];

$vim = ImageCreateFromGif($imageName);
$width = imagesx($vim);
$height = imagesy($vim);
$im = @imagecreatetruecolor($width, $height)
or die("Impossibile istanziare la nuova immagine");
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$rgb = ImageColorAt($vim, $x, $y);
$colors = imagecolorsforindex($vim, $rgb);
if($colors["red"] == 0 && $colors["green"] == 0 && $colors["blue"] == 0 && $colors["alpha"] == 0) {
$newCol = imagecolorallocate($im, $red, $green, $blue);
imagesetpixel($im, $x, $y, $newCol);
}
else {
$newCol = imagecolorallocate($im, $bred, $bgreen, $bblue);
imagesetpixel($im, $x, $y, $newCol);
}
}
}
imagegif($im);
?>


Ovviamente se lo provate su un'immagine a colori, succede un pò di casino :D
Ciao a tutti ;)

P.S la funzione rgb2hex2rgb($stringa) prende un colore esadecimale e ne calcola i canali rosso, verde e blu, e li restituisce in 1 array ;)