(PHP 5, PHP 7, PHP 8)
imagefilter — Aplica un filtro a una imagen
imagefilter() aplica el filtro dado
filter sobre la image.
imagefilter
filter puede ser uno de los siguientes:
IMG_FILTER_NEGATE : Invierte todos los colores de
la imagen.
IMG_FILTER_GRAYSCALE : Convierte la imagen a
niveles de gris cambiando las componentes roja, verde y azul a su
suma ponderada utilizando los mismos coeficientes que el cálculo luma REC.601 (Y').
Las componentes alfa se conservan. Para imágenes de paleta, el
resultado puede ser diferente debido a las limitaciones de la paleta.
IMG_FILTER_BRIGHTNESS : Modifica el brillo
de la imagen. Utilice args para definir el nivel de
brillo. El rango de brillo está entre -255 y 255.
IMG_FILTER_CONTRAST : Modifica el contraste de
la imagen. Utilice args para definir el nivel de
contraste.
IMG_FILTER_COLORIZE : similar a
IMG_FILTER_GRAYSCALE, excepto que es posible especificar el
color. Utilice args, arg2 y
arg3 en forma de
red, green,
blue y arg4 para el canal
alpha. El rango de cada color está entre 0 y 255.
IMG_FILTER_EDGEDETECT : Utiliza la detección de bordes para
resaltar los bordes de la imagen.
IMG_FILTER_EMBOSS : Permite embosar la imagen.
IMG_FILTER_GAUSSIAN_BLUR : Desenfoca la imagen utilizando el
método gaussiano.
IMG_FILTER_SELECTIVE_BLUR : Desenfoca la imagen.
IMG_FILTER_MEAN_REMOVAL : Utiliza la supresión de la media
para obtener un efecto "croquis".
IMG_FILTER_SMOOTH : Hace la imagen más suave.
Utilice args para definir el nivel de suavizado.
IMG_FILTER_PIXELATE : Aplica un efecto de pixeles a
la imagen, utilice args para definir el tamaño del bloque
y arg2 para definir el modo de efecto de pixeles.
IMG_FILTER_SCATTER : Aplica un efecto de dispersión
a la imagen, utilice args y
arg2 para definir la intensidad del efecto y
arg3 para aplicar el efecto solo
sobre ciertos colores de píxeles.
args
IMG_FILTER_BRIGHTNESS : Nivel de brillo.
IMG_FILTER_CONTRAST : Nivel de contraste.
IMG_FILTER_COLORIZE : Valor del componente rojo.
IMG_FILTER_SMOOTH : Nivel de suavizado.
IMG_FILTER_PIXELATE : Tamaño del bloque en píxeles.
IMG_FILTER_SCATTER : Nivel de sustracción del efecto.
No debe ser superior o igual al nivel de adición definido con
arg2.
arg2
IMG_FILTER_COLORIZE : Valor del componente verde.
IMG_FILTER_PIXELATE : Uso o no del efecto de pixeles
avanzado (el valor por omisión es false).
IMG_FILTER_SCATTER : Nivel de adición del efecto.
arg3
IMG_FILTER_COLORIZE : Valor del componente azul.
IMG_FILTER_SCATTER : Array opcional de valores de color indexados
para aplicar el efecto.
arg4
IMG_FILTER_COLORIZE canal Alpha, un valor
entre 0 y 127. 0 indica opacidad total mientras que 127 indica transparencia total.
Genera un ValueError
si sub o plus provoca un desbordamiento o
un subdesbordamiento con el IMG_FILTER_SCATTER filter.
| Versión | Descripción |
|---|---|
| 8.4.0 |
Genera ahora un ValueError
si sub o plus provoca un desbordamiento o
un subdesbordamiento con el IMG_FILTER_SCATTER filter.
|
| 8.0.0 |
image ahora espera una instancia de GdImage;
anteriormente, se esperaba un resource gd válido.
|
| 7.4.0 |
Se añadió el soporte para la dispersión (IMG_FILTER_SCATTER).
|
Ejemplo #1 Ejemplo de niveles de gris 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 'Conversión a escala de grises fallida.';
}
?>
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');
}
else
{
echo 'Cambio de brillo fallido.';
}
?>
Ejemplo #3 Ejemplo de colorización con imagefilter()
<?php
$im = imagecreatefrompng('philip.png');
/* R, G, B, así que 0, 255, 0 es verde */
if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0))
{
echo 'Imagen teñida de verde con éxito.';
imagepng($im, 'philip.png');
}
else
{
echo 'Teñido de verde fallido.';
}
?>
Ejemplo #4 Ejemplo de negativo con imagefilter()
<?php
// Define la función negate para que sea portable para
// versiones de php sin imagefilter()
function negate($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 && negate($im))
{
echo 'Imagen convertida a colores negativos con éxito.';
imagejpeg($im, 'kalle.jpg', 100);
}
else
{
echo 'Conversión a colores negativos fallida.';
}
?>
Ejemplo #5 Ejemplo de pixeles con imagefilter()
<?php
// Carga el logo PHP, debemos crear dos instancias
// para ver las diferencias
$logo1 = imagecreatefrompng('./php.png');
$logo2 = imagecreatefrompng('./php.png');
// Creación de la instancia de imagen sobre la cual queremos
// ver las diferencias
$output = imagecreatetruecolor(imagesx($logo1) * 2, imagesy($logo1));
// Aplica el efecto de pixeles a cada instancia con un
// tamaño de bloque de 3
imagefilter($logo1, IMG_FILTER_PIXELATE, 3);
imagefilter($logo2, IMG_FILTER_PIXELATE, 3, true);
// Fusiona las diferencias sobre la imagen de salida
imagecopy($output, $logo1, 0, 0, 0, 0, imagesx($logo1) - 1, imagesy($logo1) - 1);
imagecopy($output, $logo2, imagesx($logo2), 0, 0, 0, imagesx($logo2) - 1, imagesy($logo2) - 1);
// Muestra las diferencias
header('Content-Type: image/png');
imagepng($output);
?>Resultado del ejemplo anterior es similar a:
Ejemplo #6 Ejemplo de dispersión con imagefilter()
<?php
// Carga la imagen
$logo = imagecreatefrompng('./php.png');
// Aplica un efecto de dispersión muy suave a la imagen
imagefilter($logo, IMG_FILTER_SCATTER, 3, 5);
// Muestra la imagen con el efecto de dispersión
header('Content-Type: image/png');
imagepng($logo);
?>Resultado del ejemplo anterior es similar a:
Nota: El resultado de
IMG_FILTER_SCATTERsiempre es aleatorio.