Вход Регистрация
Файл: sys/inc/MultiWave.php
Строк: 43
<?php
function MultiWave$img )
{
    
$width  imagesx$img );
    
$height imagesy$img );
    
$img2   imagecreatetruecolor$width$height );
    
$rand1  mt_rand7000001000000 ) / 15000000;
    
$rand2  mt_rand7000001000000 ) / 15000000;
    
$rand3  mt_rand7000001000000 ) / 15000000;
    
$rand4  mt_rand7000001000000 ) / 15000000;
    
// фазы
    
$rand5  mt_rand03141592 ) / 1000000;
    
$rand6  mt_rand03141592 ) / 1000000;
    
$rand7  mt_rand03141592 ) / 1000000;
    
$rand8  mt_rand03141592 ) / 1000000;
    
// амплитуды
    
$rand9  mt_rand400600 ) / 100;
    
$rand10 mt_rand400600 ) / 100;
    for ( 
$x 0$x $width$x++ ) {
        for ( 
$y 0$y $height$y++ ) {
            
// координаты пикселя-первообраза.
            
$sx $x + ( sin$x $rand1 $rand5 ) + sin$y $rand3 $rand6 ) ) * $rand9;
            
$sy $y + ( sin$x $rand2 $rand7 ) + sin$y $rand4 $rand8 ) ) * $rand10;
            
// первообраз за пределами изображения
            
if ( $sx || $sy || $sx >= $width || $sy >= $height ) {
                
$color    255;
                
$color_x  255;
                
$color_y  255;
                
$color_xy 255;
            } else { 
// цвета основного пикселя и его 3-х соседей для лучшего антиалиасинга
                
$color    = ( imagecolorat$img$sx$sy ) >> 16 ) & 0xFF;
                
$color_x  = ( imagecolorat$img$sx 1$sy ) >> 16 ) & 0xFF;
                
$color_y  = ( imagecolorat$img$sx$sy ) >> 16 ) & 0xFF;
                
$color_xy = ( imagecolorat$img$sx 1$sy ) >> 16 ) & 0xFF;
            } 
// сглаживаем только точки, цвета соседей которых отличается
            
if ( $color == $color_x && $color == $color_y && $color == $color_xy ) {
                
$newcolor $color;
            } else {
                
$frsx     $sx floor$sx ); //отклонение координат первообраза от целого
                
$frsy     $sy floor$sy );
                
$frsx1    $frsx;
                
$frsy1    $frsy;
                
// вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
                
$newcolor floor$color $frsx1 $frsy1 $color_x $frsx $frsy1 $color_y $frsx1 $frsy $color_xy $frsx $frsy );
            }
            
imagesetpixel$img2$x$yimagecolorallocate$img2$newcolor$newcolor$newcolor ) );
        }
    }
    return 
$img2;
}
Онлайн: 1
Реклама