Pregunta

Obtuve la imagen así (es un gráfico):

 Gráfico de Comercio de Oro
(fuente: kitconet.com )

Quiero cambiar los colores, por lo que el blanco es negro, la línea del gráfico es azul claro, etc. ¿Es posible lograrlo con GD y PHP?

¿Fue útil?

Solución

Esto reemplazará el color blanco con 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);

 ingrese la descripción de la imagen aquí

Otros consejos

Tuve problemas para hacer que esta solución funcionara. La imagen no puede ser una imagen de color verdadero. Conviértalo primero con 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);

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi 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(

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi blog .

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

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi blog .

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

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi blog .

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

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi blog .

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

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi 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(

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi 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/{

Sé que es tarde y después del hecho, pero he creado un script que lo hará en una escala ligeramente mayor. Esperemos que alguien que se encuentre con esta publicación pueda usarlo. Toma una cantidad de imágenes de origen que son capas de un color (usted elige). Le proporciona un color de origen y el tinte de cada capa y el script devuelve una imagen compuesta (con total transparencia) coloreada específicamente a su código hexadecimal proporcionado.

Mira el código a continuación. Se puede encontrar una explicación más detallada en mi blog .

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

No lo he probado yo mismo, pero puedes ver la función imagecolorset () en la biblioteca GD Tiene un efecto de relleno de color, que podría ayudar con el fondo blanco.

Puede probar la función imagefilter http://lv.php.net/imagefilter , pero eso no le dará acceso directo para reemplazar un color con otro, solo cambiará los componentes r / g / b.

Se podría implementar una solución de muy bajo nivel usando imagesetpixel http://nl2.php.net/imagesetpixel para establecer los nuevos valores de píxeles.

IMG_FILTER_NEGATE: Invierte todos los colores de la imagen.

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

¿Podría ser esa una solución?

El enfoque lento pero seguro, iterando sobre cada píxel.

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

No conozco ninguna función preparada. Pero supongo que podría atravesar cada píxel de la imagen y cambiar su color ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top