• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • imagelayereffect()

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

    设定 alpha 混色标志以使用绑定的 libgd 分层效果

    说明

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

    设定 alpha 混色标志以使用绑定的 libgd 分层效果。

    参数

    $image

    由图象创建函数(例如imagecreatetruecolor())返回的图象资源。

    $effect

    One of the following constants:

    IMG_EFFECT_REPLACE
    Use pixel replacement(equivalent of passing TRUE to imagealphablending())
    IMG_EFFECT_ALPHABLEND
    Use normal pixel blending(equivalent of passing FALSE to imagealphablending())
    IMG_EFFECT_NORMAL
    Same as IMG_EFFECT_ALPHABLEND.
    IMG_EFFECT_OVERLAY
    Overlay has the effect that black background pixels will remain black, white background pixels will remain white, but grey background pixels will take the colour of the foreground pixel.

    返回值

    成功时返回TRUE,或者在失败时返回FALSE

    范例

    imagelayereffect() example

    <?php
    // Setup an image
    $im = imagecreatetruecolor(100, 100);
    // Set a background
    imagefilledrectangle($im, 0, 0, 100, 100, imagecolorallocate($im, 220, 220, 220));
    // Apply the overlay alpha blending flag
    imagelayereffect($im, IMG_EFFECT_OVERLAY);
    // Draw two grey ellipses
    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));
    // Output
    header('Content-type: image/png');
    imagepng($im);
    imagedestroy($im);
    ?>
    

    以上例程的输出类似于:

    注释

    Note:此函数仅在与 GD 库捆绑编译的 PHP 版本中可用。

    Note:此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。

    IMG_EFFECT_OVERLAY doesn't work in PHP 5.6.0 with GD version: 2.1.0-alpha.
    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.
    ^^ 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);
    ?>
    
    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.

    上篇:imagejpeg()

    下篇:imageline()