PHP Conference Japan 2024

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
使用像素替換(相當於傳遞 trueimagealphablending()
IMG_EFFECT_ALPHABLEND
使用一般的像素混合(相當於傳遞 falseimagealphablending()
IMG_EFFECT_NORMAL
IMG_EFFECT_ALPHABLEND 相同。
IMG_EFFECT_OVERLAY
覆蓋效果為:黑色背景像素將保持黑色,白色背景像素將保持白色,但灰色背景像素將呈現前景像素的顏色。
IMG_EFFECT_MULTIPLY
以乘法效果覆蓋。

返回值

成功時返回 true,失敗時返回 false

更新日誌

版本 描述
8.0.0 image 現在需要一個 GdImage 實例;先前需要一個有效的 gd 資源
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 則註解

rx
10 年前
在 PHP 5.6.0 與 GD 版本 2.1.0-alpha 中,IMG_EFFECT_OVERLAY 無法運作。
[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);

?>
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 中的不同圖層一樣混合顏色。
andrew at iwebsolutions dot co dot uk
16 年前
我一直遇到一個致命錯誤

致命錯誤:呼叫未定義的函式 imagelayereffect()

這在 Ubuntu 伺服器 (8.04 lts) 和 php5-gd 套件上無法運作。如果您需要這個功能,您必須重新編譯內建 GD 的 PHP。
To Top