# imagefilter

(PHP 5, PHP 7, PHP 8)

imagefilter — Aplica un filtro a una imagen

### Descripción

imagefilter(
resource `$image`,
int `$filtertype`,
int `$arg1` = ?,
int `$arg2` = ?,
int `$arg3` = ?,
int `$arg4` = ?
): bool

imagefilter() aplica el filtro dado por `filtertype` sobre la imagen `image`.

### Parámetros

`image`

  Un recurso image, es devuelto por una de las funciones de creación de imágenes, como imagecreatetruecolor().

`filtertype`

  `filtertype` puede ser lo siguitente:

  - `IMG_FILTER_NEGATE`: Invierte todos los colores de la imagen.
  - `IMG_FILTER_GRAYSCALE`: Convierte la imagen a escala de grises.
  - `IMG_FILTER_BRIGHTNESS`: Cambia el brillo de la imagen. Use `arg1` para establecer el nivel de brillo. El rango para el brillo es de -255 a 255.
  - `IMG_FILTER_CONTRAST`: Cambia el contraste de la imagen. Use `arg1` para establecer el nivel de contraste.
  - `IMG_FILTER_COLORIZE`: Como `IMG_FILTER_GRAYSCALE`, excepto que se puede especificar el color. Use `arg1`, `arg2` y `arg3` en la forma `red`, `green`, `blue` y `arg4` para el canal `alpha`. El rango de cada color es de 0 a 255.
  - `IMG_FILTER_EDGEDETECT`: Utiliza detección de borde para resaltar los bordes de la imagen.
  - `IMG_FILTER_EMBOSS`: Pone en relieve la imagen.
  - `IMG_FILTER_GAUSSIAN_BLUR`: Pone borrosa la imagen usando el método Gaussiano.
  - `IMG_FILTER_SELECTIVE_BLUR`: Pone borrosa la imagen.
  - `IMG_FILTER_MEAN_REMOVAL`: Utiliza eliminación media para lograr un efecto "superficial".
  - `IMG_FILTER_SMOOTH`: Suaviza la imagen. Use `arg1` para esteblecer el nivel de suavidad.
  - `IMG_FILTER_PIXELATE`: Aplica el efecto de pixelación a la imagen, use `arg1` para establecer el tamaño de bloque y `arg2` para establecer el modo de efecto de pixelación.
`arg1`

  - `IMG_FILTER_BRIGHTNESS`: Nivel de brillo.
  - `IMG_FILTER_CONTRAST`: Nivel de contraste.
  - `IMG_FILTER_COLORIZE`: Valor del componente rojo.
  - `IMG_FILTER_SMOOTH`: Nivel de suavidad.
  - `IMG_FILTER_PIXELATE`: Tamaño de bloque en píxeles.
`arg2`

  - `IMG_FILTER_COLORIZE`: Valor del componente verde.
  - `IMG_FILTER_PIXELATE`: Si usar o no el efecto de pixelación avanzado (por defecto a `false`).
`arg3`

  - `IMG_FILTER_COLORIZE`: Valor del componente azul.
`arg4`

  - `IMG_FILTER_COLORIZE`: Canal alfa. Un valor entre 0 y 127. 0 indica completamente opaco mientras que 127 indica completamente transparente.

### Valores devueltos

Devuelve `true` en caso de éxito o `false` en caso de error.

### Historial de cambios

Versión | Descripción
--- | ---
5.3.0 | Se añadió el soporete de pixelación (`IMG_FILTER_PIXELATE`).
5.2.5 | Se añadió el soporte de alfa para `IMG_FILTER_COLORIZE`.

### Ejemplos

Ejemplo #1 Ejemplo de escala de grises con imagefilter()

`<?php
$im = imagecreatefrompng('dave.png');
if($im && imagefilter($im, IMG_FILTER_GRAYSCALE))
{
echo 'Imagen convertida a escala de grises.';
imagepng($im, 'dave.png');
}
else
{
echo 'La conversión a escala de grises falló.';
}
imagedestroy($im);
?>`

Ejemplo #2 Ejemplo de brillo con imagefilter()

`<?php
$im = imagecreatefrompng('sean.png');
if($im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20))
{
echo 'Brillo de la imagen cambiado.';
imagepng($im, 'sean.png');
imagedestroy($im);
}
else
{
echo 'El cambio del brillo de la imagen falló.';
}
?>`

Ejemplo #3 Ejemplo de coloración con imagefilter()

`<?php
$im = imagecreatefrompng('philip.png');
/* R, G, B, así 0, 255, 0 es verde */
if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0))
{
echo 'Imagen sombreada a verde con éxito.';
imagepng($im, 'philip.png');
imagedestroy($im);
}
else
{
echo 'El sombreado a verde falló.';
}
?>`

Ejemplo #4 Ejemplo de inversión de color con imagefilter()

`<?php
// Define nuestra función negativo, así es portable para
// versiones de php sin imagefilter()
function negativo($im)
{
if(function_exists('imagefilter'))
{
return imagefilter($im, IMG_FILTER_NEGATE);
}
for($x = 0; $x < imagesx($im); ++$x)
{
for($y = 0; $y < imagesy($im); ++$y)
{
$index = imagecolorat($im, $x, $y);
$rgb = imagecolorsforindex($index);
$color = imagecolorallocate($im, 255 - $rgb['red'], 255 - $rgb['green'], 255 - $rgb['blue']);
imagesetpixel($im, $x, $y, $color);
}
}
return(true);
}
$im = imagecreatefromjpeg('kalle.jpg');
if($im && negativo($im))
{
echo 'Imagen convertida a colores negativos con éxtito.';
imagejpeg($im, 'kalle.jpg', 100);
imagedestroy($im);
}
else
{
echo 'La conversión a colores negativos falló.';
}
?>`

Ejemplo #5 Ejemplo de pixelación con imagefilter()

`<?php
// Cargar el logotipo de PHP, necesitamos crear dos instancias
// para mostrar las diferencias
$logo1 = imagecreatefrompng('./php.png');
$logo2 = imagecreatefrompng('./php.png');
// Crear la instancia de imagen que queremos para mostrar
// las diferencias
$salida = imagecreatetruecolor(imagesx($logo1) * 2, imagesy($logo1));
// Aplicar pixelación a cada instancia, con un tamaño de
// bloque de 3
imagefilter($logo1, IMG_FILTER_PIXELATE, 3);
imagefilter($logo2, IMG_FILTER_PIXELATE, 3, true);
// Fusionar las diferencias a la imagen de salida
imagecopy($salida, $logo1, 0, 0, 0, 0, imagesx($logo1) - 1, imagesy($logo1) - 1);
imagecopy($salida, $logo2, imagesx($logo2), 0, 0, 0, imagesx($logo2) - 1, imagesy($logo2) - 1);
imagedestroy($logo1);
imagedestroy($logo2);
// Imprimir las diferencias
header('Content-Type: image/png');
imagepng($salida);
imagedestroy($salida);
?>`

El resultado del ejemplo sería algo similar a:

### Notas

### Ver también

- imageconvolution() - Aplicar una matriz de convolución de 3x3, usando coeficiente e índice