|
| |
|
|
| |
для: qq
(26.06.2007 в 14:24)
| | | А теперь анализ:
Обозначим
CD - цветовая компонента фона,
AD - прозрачность фона,
CS - цветовая компонента накладываемого пикселя,
AS - прозрачность накладываемого пикселя,
CR - цветовая компонента результата,
AR - прозрачность результата,
все значения от 0 до 1 (доля от максимума).
IMG_EFFECT_REPLACE
CR=CS
AR=AS
IMG_EFFECT_NORMAL & IMG_EFFECT_ALPHABLEND
CR=CD*AS+CS*(1-AS)
AR=AD*AS
IMG_EFFECT_OVERLAY
CR=???
AR=1-(1-AD)*(1-AS)
К сожалению, мне так и не удалось узнать, что же происходит с цветом в оверлее :(
Но это точно не удвоенное произведение, как я сначала подумал. Так что вопрос открыт. | |
| |
|
|
| |
|
|
| |
для: qq
(26.06.2007 в 19:53)
| | | Я немного перепутал в предыдущем посте. Одинаково ведут себя NORMAL и ALPHABLEND (а не REPLACE).
Короче, вот скрипт для экспериментов:
<?php
//По очереди раскомментируем режимы.
define("MODE", IMG_EFFECT_REPLACE);
//define("MODE", IMG_EFFECT_NORMAL);
//define("MODE", IMG_EFFECT_ALPHABLEND);
//define("MODE", IMG_EFFECT_OVERLAY);
function C($r,$g,$b,$a) //Выбор цвета, для сокращения записи.
{
global $image1;
return imagecolorallocatealpha($image1,$r,$g,$b,$a);
}
function FR($d,$n,$c) //Рисует одну полоску, $d - флаг вертикальности, $n - смещение, $c - цвет.
{
global $image1;
$p1=32+24*$n; $p2=$p1+23; $q1=8; $q2=247;
$x1=$d?$p1:$q1; $y1=$d?$q1:$p1;
$x2=$d?$p2:$q2; $y2=$d?$q2:$p2;
imagefilledrectangle($image1,$x1,$y1,$x2,$y2,$c);
}
function A($d) //Рисует 8 полосок, можно поэкспериментировать с цветами.
{
FR($d,0,C(127,0 ,0 ,0 ));
FR($d,1,C(0 ,127,0 ,0 ));
FR($d,2,C(0 ,0 ,127,0 ));
FR($d,3,C(255,255,255,0 ));
FR($d,4,C(0 ,0 ,0 ,63));
FR($d,5,C(255,255,255,63));
FR($d,6,C(0 ,0 ,0 ,127));
FR($d,7,C(255,255,255,127));
}
$t=ceil(microtime(TRUE)*1000);
header("Content-type: image/png");
$image1=imagecreatetruecolor(256,256);
imagealphablending($image1,FALSE);
///////////////////////////////////////////////
A(0);
//imagealphablending($image1,TRUE); //Эта строка ничего не меняет- доказательство того, что imagelayereffect полностью перекрывает imagealphablending.
imagelayereffect($image1,MODE);
A(1);
///////////////////////////////////////////////
$t=ceil(microtime(TRUE)*1000)-$t;
$t="Execution time: ".$t." ms";
imagealphablending($image1,FALSE);
imagestring($image1,2,1,-2,$t,imagecolorallocate($image1,255,255,255));
imagesavealpha($image1,TRUE);
imagepng($image1);
imagedestroy($image1);
?>
|
P.S. скрипт лучше смотреть на ярком фоне, чтобы видеть прозрачные места. | |
| |
|
|
| |
|
|
| |
для: qq
(26.06.2007 в 14:24)
| | | Короче, я тут после долгих мучений выяснил следующее:
effect может принимать одно из 4 значений:
IMG_EFFECT_REPLACE
IMG_EFFECT_ALPHABLEND
IMG_EFFECT_NORMAL
IMG_EFFECT_OVERLAY
ALPHABLEND: вроде действительно блендит, по крайней мере на альфу реагирует. Точно не уверен, но вроде то же самое, что и imagealphablending($image,TRUE)
REPLACE и NORMAL: так и не понял чем отличаются... Вроде то же, что и imagealphablending($image,FALSE)
А вот OVERLAY... Что бы вы думали? УМНОЖАЕТ!!! Ура! (точнее, умножает фон на пиксель и результат еще умножает на 2).
Сейчас попробую завершить исследование с альфой, потом постараюсь выложить скрипт. | |
| |
|
|
| |
|
|
| |
для: qq
(26.06.2007 в 18:19)
| | | >Цитирую с переводом:
>Черные пиксели фона остаются черными, белые пиксели фона остаются белыми, но серые пиксели (что он имеет в виду?) принимают цвет накладываемого пикселя.
Посмею предположить, что речь идет о прозрачности (точнее об альфе)!
Черный цвет - слой абсолютно прозрачен, а чем цвет светлее, тем он менее прозрачный :))
Но это только предположение, сделанное по цитате... | |
| |
|
|
| |
|
|
| |
для: Ravanger
(26.06.2007 в 18:24)
| | | То же самое.
Я же здравомыслящий человек. Разумеется, я посмотрел в официальном справочнике в первую очередь. Там нет описания.
И гуглом пользоваться я тоже умею, так что раз уж спросил, значит затык капитальный. | |
| |
|
| |
| |
|
|
| |
для: Ressfourt
(26.06.2007 в 17:26)
| | | Разумеется, я там был.
Товарищ TTOHEY в комментариях перечислил 3 возможных значения effect, но, судя по его описанию, 2 из них по эффекту совпадают с imagealphablending(FALSE/TRUE) (а я этому не верю). Что же касается третьего значения, IMG_EFFECT_OVERLAY, то он там так непонятно написал, что даже наверно сам не понял :)...
Цитирую с переводом:
Черные пиксели фона остаются черными, белые пиксели фона остаются белыми, но серые пиксели (что он имеет в виду?) принимают цвет накладываемого пикселя.
Собственно, мои собственные попытки исследования данной функции не дают вышеописанных результатов, точнее, они вообще никаких результатов не дают.
А спрашиваю я не из праздного любопытства, а потому, что мне позарез надо попиксельно покомпонентно перемножить 2 изображения (делаю капчу). Я пока временно делаю умножение в двойном цикле, но это ОЧЕНЬ долго. И вот как раз поэтому у меня появились подозрения в том, что эта таинственная функция может мне в моей задаче помочь... Уж больно имя у нее оптимистичное.
Может у кого нибудь есть под рукой бумажный справочник? Выручите нубика... | |
| |
|
|
| |
|
|
| |
для: qq
(26.06.2007 в 17:11)
| | | http://ee2.php.net/manual/ru/function.imagelayereffect.php | |
| |
|
|
| |
|
|
| |
для: qq
(26.06.2007 в 14:24)
| | | Ну неужели никто в мире не знает что это за ````ная функция такая!?!?!?! | |
| |
|
|
| |
|
|
| | Как пользовать эту функцию? Все обыскал, нигде нет. | |
| |
|
| |
|