I assume, that the specific effects are similiar to those used in Adobe Photoshop for blending layers.
There might be things like IMG_EFFECT_MULTIPLY resulting of that.
imagelayereffect
(PHP 4 >= 4.3.0, PHP 5)
imagelayereffect — Establecer la bandera de mezcla alfa para usar los efectos de capa de la biblioteca gd incluida
Descripción
bool imagelayereffect
( resource
$image
, int $effect
)Establece la bandera de mezcla alfa para usar los efectos de capa de la biblioteca gd incluida.
Parámetros
-
image -
Un recurso image, es devuelto por una de las funciones de creación de imágenes, como imagecreatetruecolor().
-
effect -
Una de las siguientes constantes:
-
IMG_EFFECT_REPLACE -
Usar el píxel de sustitución (equivalente a pasar
TRUEa imagealphablending()) -
IMG_EFFECT_ALPHABLEND -
Unsar la mezcla de píxel normal (equivalente a pasar
TRUEa imagealphablending()) -
IMG_EFFECT_NORMAL -
Lo mismo que
IMG_EFFECT_ALPHABLEND. -
IMG_EFFECT_OVERLAY - La capa de revestimieto tiene el efecto de que los píxeles del fondo negro permanecerán negros, los píxeles del fondo blanco permanecerán blancos, pero los los píxeles del fondo gris tomarán el color del píxel del primer plano.
-
Valores devueltos
Devuelve TRUE en caso de éxito o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo de imagelayereffect()
<?php
// Establecer una imagen
$im = imagecreatetruecolor(100, 100);
// Establecer un fondo
imagefilledrectangle($im, 0, 0, 100, 100, imagecolorallocate($im, 220, 220, 220));
// Aplicar la bandera de la capa de revestimiento de la mezcla alfa
imagelayereffect($im, IMG_EFFECT_OVERLAY);
// Dibujar dos 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));
// Imprimir
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
El resultado del ejemplo sería algo similar a:
Notas
Nota: Esta función sólo está disponible si PHP fue compilado con la versión incluida de GD library.
Nota: Esta función require GD 2.0.1 o superior (se recomienda 2.0.28 o superior).
Anonymous ¶
8 years ago
andrew at iwebsolutions dot co dot uk ¶
4 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.
[myname] at mac dot com ¶
5 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);
?>
Remon ¶
5 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.
