在使用GD版本:2.1.0-alpha的PHP 5.6.0中,IMG_EFFECT_OVERLAY不起作用。
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
imagelayereffect — 设置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
版本 | 描述 |
---|---|
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);
?>
以上示例将输出类似于以下内容
^^ 我的名字是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);
?>
我在一个中文网站上找到了以下示例,并对其进行了翻译和调整。它根据示例图片创建了一个肖像。
<?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);
?>
尝试移除“创建蒙版”代码,只需添加另一个使用`imagecreatefromjpeg`创建的图像,即可查看“普通”叠加效果。它像Photoshop中的图层一样混合颜色。
我遇到一个致命错误
致命错误:调用未定义函数 imagelayereffect()
这在Ubuntu服务器(8.04 LTS)和php5-gd包上不起作用。如果需要此功能,则必须使用内置GD重新编译PHP。