imagelayereffect
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
imagelayereffect — 设定 alpha 混合标志以使用分层效果
参数
-
image
由图象创建函数(例如imagecreatetruecolor())返回的 GdImage 对象。
effect
-
下列常量之一:
IMG_EFFECT_REPLACE
-
使用像素替换(等同于将
true
传递给 imagealphablending()) IMG_EFFECT_ALPHABLEND
-
使用普通像素混合(等同于将
false
传递给 imagealphablending()) IMG_EFFECT_NORMAL
-
与
IMG_EFFECT_ALPHABLEND
相同。 IMG_EFFECT_OVERLAY
- 叠加(overlay)的效果是黑色背景像素将保持黑色,白色背景像素将保持白色,但灰色背景像素将采用前景像素的颜色。
IMG_EFFECT_MULTIPLY
- Overlays with a multiply effect.
更新日志
版本 | 说明 |
---|---|
8.0.0 |
image 现在需要 GdImage 实例;之前需要有效的 gd resource。
|
7.2.0 |
新增 IMG_EFFECT_MULTIPLY (要求系统 libgd >= 2.1.1 或捆绑 libgd)。
|
示例
示例 #1 imagelayereffect() 示例
<?php
// 设置图像
$im = imagecreatetruecolor(100, 100);
// 设置背景
imagefilledrectangle($im, 0, 0, 100, 100, imagecolorallocate($im, 220, 220, 220));
// Apply the overlay alpha blending flag
imagelayereffect($im, IMG_EFFECT_OVERLAY);
// 绘制两个灰色椭圆
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));
// 输出
header('Content-type: image/png');
imagepng($im);
?>
以上示例的输出类似于:

+添加备注
用户贡献的备注 4 notes
[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);
?>
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.
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.
备份地址:http://www.lvesu.com/blog/php/function.imagelayereffect.php