PHPCon Poland 2024

imagelayereffect

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

imagelayereffectDefine a opção de mesclagem alfa para usar efeitos de camada

Descrição

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

Define a opção de mesclagem alfa para usar efeitos de camada.

Parâmetros

image

Um objeto GdImage, retornado por uma das funções de criação de imagem, como imagecreatetruecolor().

effect

Uma das constantes a seguir:

IMG_EFFECT_REPLACE
Usa substituição de pixel (equivalente a passar true para imagealphablending())
IMG_EFFECT_ALPHABLEND
Usa mesclagem de pixel normal (equivalent a passar false para imagealphablending())
IMG_EFFECT_NORMAL
O mesmo que IMG_EFFECT_ALPHABLEND.
IMG_EFFECT_OVERLAY
Sobreposição tem o efeito em que os pixels do fundo preto permanecerão pretos, pixels de fundo branco permanecerão brancos, mas pixels de fundo cinza tomarão a cor do pixel de primeiro plano.
IMG_EFFECT_MULTIPLY
Sobrepõe com efeito de multiplicação.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Registro de Alterações

Versão Descrição
8.0.0 O parâmetro image agora espera uma instância de GdImage; anteriormente, um resource gd válido era esperado.
7.2.0 Adicionada a constante IMG_EFFECT_MULTIPLY (requer libgd de sistema >= 2.1.1 ou a libgd incluída no pacote).

Exemplos

Exemplo #1 Exemplo de imagelayereffect()

<?php
// Configura uma imagem
$im = imagecreatetruecolor(100, 100);

// Define a cor de fundo
imagefilledrectangle($im, 0, 0, 100, 100, imagecolorallocate($im, 220, 220, 220));

// Applica a opção de mesclagem alfa de sobreposição
imagelayereffect($im, IMG_EFFECT_OVERLAY);

// Desenha duas elipses cinzas
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));

// Mostra
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

O exemplo acima produzirá algo semelhante a:

Saída do exemplo: imagelayereffect()
add a note

User Contributed Notes 4 notes

up
0
rx
9 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
16 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
0
Remon
16 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.
up
-3
andrew at iwebsolutions dot co dot uk
15 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.
To Top