imagelayereffect

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

imagelayereffect β€” УстанавливаСт Ρ„Π»Π°Π³ Π°Π»ΡŒΡ„Π°-смСшивания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эффСкты налоТСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ОписаниС

function imagelayereffect(GdImage $image, int $effect): true

Ѐункция устанавливаСт Ρ„Π»Π°Π³ Π°Π»ΡŒΡ„Π°-смСшивания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эффСкты налоТСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

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.

Бписок измСнСний

ВСрсия ОписаниС
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);

// РисуСм Π΄Π²Π° сСрых эллипса
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));

// УстанавливаСм Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с MIME-Ρ‚ΠΈΠΏΠΎΠΌ изобраТСния ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
header('Content-type: image/png');
imagepng($im);

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π°:

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°: Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ imagelayereffect()
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 4 notes

up
0
rx ΒΆ
11 years ago
IMG_EFFECT_OVERLAY doesn't work in PHP 5.6.0 with GD version: 2.1.0-alpha.
up
0
[myname] at mac dot com ΒΆ
18 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);

?>
up
0
Remon ΒΆ
18 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.
up
-3
andrew at iwebsolutions dot co dot uk ΒΆ
17 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.