Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: imagelayereffect
 
 автор: qq   (26.06.2007 в 14:24)   письмо автору
 
 

Как пользовать эту функцию? Все обыскал, нигде нет.

   
 
 автор: qq   (26.06.2007 в 17:11)   письмо автору
 
   для: qq   (26.06.2007 в 14:24)
 

Ну неужели никто в мире не знает что это за ````ная функция такая!?!?!?!

   
 
 автор: Ressfourt   (26.06.2007 в 17:26)   письмо автору
 
   для: qq   (26.06.2007 в 17:11)
 

http://ee2.php.net/manual/ru/function.imagelayereffect.php

   
 
 автор: qq   (26.06.2007 в 18:19)   письмо автору
 
   для: Ressfourt   (26.06.2007 в 17:26)
 

Разумеется, я там был.
Товарищ TTOHEY в комментариях перечислил 3 возможных значения effect, но, судя по его описанию, 2 из них по эффекту совпадают с imagealphablending(FALSE/TRUE) (а я этому не верю). Что же касается третьего значения, IMG_EFFECT_OVERLAY, то он там так непонятно написал, что даже наверно сам не понял :)...
Цитирую с переводом:
Черные пиксели фона остаются черными, белые пиксели фона остаются белыми, но серые пиксели (что он имеет в виду?) принимают цвет накладываемого пикселя.
Собственно, мои собственные попытки исследования данной функции не дают вышеописанных результатов, точнее, они вообще никаких результатов не дают.

А спрашиваю я не из праздного любопытства, а потому, что мне позарез надо попиксельно покомпонентно перемножить 2 изображения (делаю капчу). Я пока временно делаю умножение в двойном цикле, но это ОЧЕНЬ долго. И вот как раз поэтому у меня появились подозрения в том, что эта таинственная функция может мне в моей задаче помочь... Уж больно имя у нее оптимистичное.

Может у кого нибудь есть под рукой бумажный справочник? Выручите нубика...

   
 
 автор: ddhvvn   (26.06.2007 в 19:46)   письмо автору
 
   для: qq   (26.06.2007 в 18:19)
 

>Цитирую с переводом:
>Черные пиксели фона остаются черными, белые пиксели фона остаются белыми, но серые пиксели (что он имеет в виду?) принимают цвет накладываемого пикселя.


Посмею предположить, что речь идет о прозрачности (точнее об альфе)!
Черный цвет - слой абсолютно прозрачен, а чем цвет светлее, тем он менее прозрачный :))

Но это только предположение, сделанное по цитате...

   
 
 автор: Ravanger   (26.06.2007 в 18:24)   письмо автору
 
   для: qq   (26.06.2007 в 14:24)
 

http://ua.php.net/manual/ru/function.imagelayereffect.php

   
 
 автор: qq   (26.06.2007 в 19:43)   письмо автору
 
   для: Ravanger   (26.06.2007 в 18:24)
 

То же самое.
Я же здравомыслящий человек. Разумеется, я посмотрел в официальном справочнике в первую очередь. Там нет описания.

И гуглом пользоваться я тоже умею, так что раз уж спросил, значит затык капитальный.

   
 
 автор: qq   (26.06.2007 в 19:53)   письмо автору
 
   для: 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 в 20:54)   письмо автору
 
   для: 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 в 21:34)   письмо автору
 
   для: 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)

К сожалению, мне так и не удалось узнать, что же происходит с цветом в оверлее :(
Но это точно не удвоенное произведение, как я сначала подумал. Так что вопрос открыт.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования