imagelayereffect
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
imagelayereffect — アルファブレンディングフラグを設定し、レイヤ効果を使用する
パラメータ
image
imagecreatetruecolor()のような画像作成関数が返す GdImage オブジェクト。
effect
-
以下の定数のいずれか。
IMG_EFFECT_REPLACE
-
ピクセルの置換を使用します
(imagealphablending() に
true
を渡すのと同じです)。 IMG_EFFECT_ALPHABLEND
-
通常のピクセルブレンディングを使用します
(imagealphablending() に
false
を渡すのと同じです)。 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));
// オーバーレイアルファブレンディングフラグを適用します
imagelayereffect($im, IMG_EFFECT_OVERLAY);
// 2 つのグレーの楕円を描画します
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);
?>
上の例の出力は、 たとえば以下のようになります。
+add a note
User Contributed Notes 4 notes
[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);
?>
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.
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.