imagelayereffect

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

imagelayereffect设置 alpha 混合标志以使用分层效果

描述

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

设置 alpha 混合标志以使用分层效果。

参数

image

一个 GdImage 对象,由某个图像创建函数返回,例如 imagecreatetruecolor()

effect

以下常量之一

IMG_EFFECT_REPLACE
使用像素替换(相当于将 true 传递给 imagealphablending()
IMG_EFFECT_ALPHABLEND
使用正常的像素混合(相当于将 false 传递给 imagealphablending()
IMG_EFFECT_NORMAL
IMG_EFFECT_ALPHABLEND 相同。
IMG_EFFECT_OVERLAY
覆盖效果是黑色背景像素将保持黑色,白色背景像素将保持白色,但灰色背景像素将采用前景像素的颜色。
IMG_EFFECT_MULTIPLY
使用乘法效果覆盖。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
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));

// 应用覆盖 alpha 混合标志
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);
imagedestroy($im);
?>

以上示例将输出类似于以下内容

Output of example : imagelayereffect()
添加备注

用户贡献的备注 4 个备注

0
rx
9 年前
IMG_EFFECT_OVERLAY 在使用 GD 版本:2.1.0-alpha 的 PHP 5.6.0 中不起作用。
0
[myname] at mac dot com
16 年前
^^ 我的名字是 coreyward ^^

imagelayereffect 需要应用于目标图像,而不是源图像。如前所述,截至目前,唯一有用的“效果”是 IMG_EFFECT_OVERLAY,因为其他效果只是设置 alpha 混合标志的另一种方式。

您还可以使用 imagecopymerge,并使用更低的 pct 参数来混合两个图像,从而更好地控制顶部图像的混合不透明度。

<?

// 正确地将 $im_src 覆盖到 $im_dst 上(假设尺寸相同)

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

?>
0
Remon
16 年前
我在一个中文网站上找到了以下示例,并对其进行了翻译和调整。它从示例图片中创建了一个肖像。

<?php

// 纵向图像
$im = imagecreatefromjpeg( "sample.jpg");

// 获取宽度和高度
$w = imagesx($im);
$h = imagesy($im);

// 非透明
$c_visible = 0x007F7F7F;
// 背景色(黑色)
$c_bg = 0x00000000;

// 创建蒙版
$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);

// 只有覆盖模式似乎有用
imagelayereffect($im_mask, IMG_EFFECT_OVERLAY);

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

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

?>

尝试删除“创建蒙版”代码,只需添加另一个使用“createimagefromjpeg”的图像即可查看“普通”覆盖。它会像 Photoshop 中的不同图层一样混合颜色。
-3
andrew at iwebsolutions dot co dot uk
15 年前
我一直遇到一个致命错误

致命错误:调用未定义函数 imagelayereffect()

这在 Ubuntu 服务器 (8.04 lts) 和 php5-gd 包中不起作用。如果您需要它,则必须使用内置 GD 重新编译 PHP。
To Top