©
This document uses PHP Chinese website manual Release
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
imagelayereffect — 设定 alpha 混色标志以使用绑定的 libgd 分层效果
$image
, int $effect
)设定 alpha 混色标志以使用绑定的 libgd 分层效果。
image
由图象创建函数(例如 imagecreatetruecolor() )返回的图象资源。
effect
One of the following constants:
IMG_EFFECT_REPLACE
TRUE
to
imagealphablending() )
IMG_EFFECT_ALPHABLEND
FALSE
to
imagealphablending() )
IMG_EFFECT_NORMAL
IMG_EFFECT_ALPHABLEND
.
IMG_EFFECT_OVERLAY
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
Example #1 imagelayereffect() example
<?php
// Setup an image
$im = imagecreatetruecolor ( 100 , 100 );
// Set a background
imagefilledrectangle ( $im , 0 , 0 , 100 , 100 , imagecolorallocate ( $im , 220 , 220 , 220 ));
// Apply the overlay alpha blending flag
imagelayereffect ( $im , IMG_EFFECT_OVERLAY );
// Draw two grey ellipses
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 ));
// Output
header ( 'Content-type: image/png' );
imagepng ( $im );
imagedestroy ( $im );
?>
以上例程的输出类似于:
Note: 此函数仅在与 GD 库捆绑编译的 PHP 版本中可用。
Note: 此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。
[#1] rx [2014-09-23 12:15:49]
IMG_EFFECT_OVERLAY doesn't work in PHP 5.6.0 with GD version: 2.1.0-alpha.
[#2] andrew at iwebsolutions dot co dot uk [2008-10-07 03:38:45]
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.
[#3] [myname] at mac dot com [2008-02-23 11:45:36]
^^ 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.
<?php
// 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);
?>
[#4] Remon [2008-02-05 01:12:38]
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.
[#5] [2005-02-06 04:36:32]
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.