PHP 8.5.0 Alpha 1 available for testing

imagelayereffect

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

imagelayereffectActiva la opción de mezcla alfa para utilizar los efectos de libgd

Descripción

imagelayereffect(GdImage $image, int $effect): bool

Activa la opción de mezcla alfa para utilizar los efectos de libgd.

Parámetros

image

Un objeto GdImage, retornado por una de las funciones de creación de imágenes, como imagecreatetruecolor().

effect

Una de las constantes siguientes:

IMG_EFFECT_REPLACE
Utiliza el reemplazo de píxeles (equivalente a pasar true a la función imagealphablending())
IMG_EFFECT_ALPHABLEND
Utiliza la mezcla normal de píxeles (equivalente a pasar false a la función imagealphablending())
IMG_EFFECT_NORMAL
Idéntico a la constante IMG_EFFECT_ALPHABLEND.
IMG_EFFECT_OVERLAY
El overlay tiene como efecto que los píxeles negros del fondo permanecerán negros, los blancos del fondo permanecerán blancos, pero los grises del fondo tomarán el color del píxel del primer plano.
IMG_EFFECT_MULTIPLY
Overlay con un efecto de multiplicación.

Valores devueltos

Esta función retorna true en caso de éxito o false si ocurre un error.

Historial de cambios

Versión Descripción
8.0.0 image expects a GdImage instance now; previously, a valid gd resource was expected.
7.2.0 Añadida la constante IMG_EFFECT_MULTIPLY (requiere la libgd del sistema >= 2.1.1 o la libgd integrada).

Ejemplos

Ejemplo #1 Ejemplo con imagelayereffect()

<?php
// Creación de una imagen
$im = imagecreatetruecolor(100, 100);

// Define el fondo
imagefilledrectangle($im, 0, 0, 100, 100, imagecolorallocate($im, 220, 220, 220));

// Aplica el overlay
imagelayereffect($im, IMG_EFFECT_OVERLAY);

// Dibuja 2 elipses grises
imagefilledellipse($im, 50, 50, 40, 40, imagecolorallocate($im, 100, 255, 100));
imagefilledellipse($im, 50, 50, 50, 80, imagecolorallocate($im, 100, 100, 255));
imagefilledellipse($im, 50, 50, 80, 50, imagecolorallocate($im, 255, 100, 100));

// Visualización
header('Content-type: image/png');

imagepng($im);
?>

Resultado del ejemplo anterior es similar a :

Visualización del ejemplo: imagelayereffect()
add a note

User Contributed Notes 4 notes

up
0
rx
10 years ago
IMG_EFFECT_OVERLAY doesn't work in PHP 5.6.0 with GD version: 2.1.0-alpha.
up
0
[myname] at mac dot com
17 years ago
^^ my name is coreyward ^^

imagelayereffect needs to be applied to the destination image, not the source image. As noted, the only useful "effect" as of this time is IMG_EFFECT_OVERLAY since the others are merely another way of setting the alpha blending flag.

You can also use imagecopymerge with a lower pct argument to blend two images with more control over the opacity at which the top image is blended.

<?

// overlays $im_src onto $im_dst properly (assuming same dims)

imagelayereffect($im_dst, IMG_EFFECT_OVERLAY);
imagecopy($im_dst, $im_src, 0, 0, 0, 0, $im_dst_x, $im_dst_y);

?>
up
-1
andrew at iwebsolutions dot co dot uk
16 years ago
I have been getting a fatal error:

Fatal error: Call to undefined function imagelayereffect()

This doesn't work with Ubuntu server (8.04 lts) and the php5-gd package. If you need this you will have to recompile PHP with GD built-in.
up
-1
Remon
17 years ago
I found the following example on a Chinese site and translated and adjusted it. It creates a portrait from the sample picture.

<?php

// Portrait image
$im = imagecreatefromjpeg( "sample.jpg");

// Get width and height
$w = imagesx($im);
$h = imagesy($im);

// Non-through
$c_visible = 0x007F7F7F;
// Background (black)
$c_bg = 0x00000000;

// Create mask
$im_mask = imagecreatetruecolor($w,$h);
imageFilledRectangle($im_mask, 0,0, $w,$h, $c_bg);
imageFilledEllipse ($im_mask, $w/2,$h/2, $w*.9,$h*.9, $c_visible);

// Only overlay seems to something useful
imagelayereffect($im_mask, IMG_EFFECT_OVERLAY);

imagecopy($im_mask, $im, 0,0, 0,0, $w,$h);
imagedestroy($im);

imagepng($im_mask);
imagedestroy($im_mask);

?>

Try removing the 'create mask' code and just add another image with 'createimagefromjpeg' to see 'normal' overlay. It blends the colors like different layers in Photoshop.
To Top