src/Gregwar/Captcha/CaptchaBuilder.php
public function distort($image, $width, $height, $bg)
    {
        $contents = imagecreatetruecolor($width, $height);
        $X          = $this->rand(0, $width);
        $Y          = $this->rand(0, $height);
        $phase      = $this->rand(0, 10);
        $scale      = 1.1 + $this->rand(0, 10000) / 30000;
        for ($x = 0; $x < $width; $x++) {
            for ($y = 0; $y < $height; $y++) {
                $Vx = $x - $X;
                $Vy = $y - $Y;
                $Vn = sqrt($Vx * $Vx + $Vy * $Vy);

                if ($Vn != 0) {
                    $Vn2 = $Vn + 4 * sin($Vn / 30);
                    $nX  = $X + ($Vx * $Vn2 / $Vn);
                    $nY  = $Y + ($Vy * $Vn2 / $Vn);
                } else {
                    $nX = $X;
                    $nY = $Y;
                }
                $nY = $nY + $scale * sin($phase + $nX * 0.2);

                if ($this->interpolation) {
                    $p = $this->interpolate(
                        $nX - floor($nX),
                        $nY - floor($nY),
                        $this->getCol($image, floor($nX), floor($nY), $bg),
                        $this->getCol($image, ceil($nX), floor($nY), $bg),
                        $this->getCol($image, floor($nX), ceil($nY), $bg),
                        $this->getCol($image, ceil($nX), ceil($nY), $bg)
                    );
                } else {
                    $p = $this->getCol($image, round($nX), round($nY), $bg);
                }

                if ($p == 0) {
                    $p = $bg;
                }

                imagesetpixel($contents, $x, $y, $p);
            }
        }

        return $contents;
    }
public function distort($image, $width, $height, $bg)
    {
        $contents = imagecreatetruecolor($width, $height);
        $X          = $this->rand(0, $width);
        $Y          = $this->rand(0, $height);
        $phase      = $this->rand(0, 10);
        $scale      = 1.1 + $this->rand(0, 10000) / 30000;
        for ($x = 0; $x < $width; $x++) {
            for ($y = 0; $y < $height; $y++) {
                $Vx = $x - $X;
                $Vy = $y - $Y;
                $Vn = sqrt($Vx * $Vx + $Vy * $Vy);

                if ($Vn != 0) {
                    $Vn2 = $Vn + 4 * sin($Vn / 30);
                    $nX  = $X + ($Vx * $Vn2 / $Vn);
                    $nY  = $Y + ($Vy * $Vn2 / $Vn);
                } else {
                    $nX = $X;
                    $nY = $Y;
                }
                $nY = $nY + $scale * sin($phase + $nX * 0.2);

                if ($this->interpolation) {
                    $p = $this->interpolate(
                        $nX - floor($nX),
                        $nY - floor($nY),
                        $this->getCol($image, floor($nX), floor($nY), $bg),
                        $this->getCol($image, ceil($nX), floor($nY), $bg),
                        $this->getCol($image, floor($nX), ceil($nY), $bg),
                        $this->getCol($image, ceil($nX), ceil($nY), $bg)
                    );
                } else {
                    $p = $this->getCol($image, round($nX), round($nY), $bg);
                }

                if ($p == 0) {
                    $p = $bg;
                }

                imagesetpixel($contents, $x, $y, $p);
            }
        }

        return $contents;
    }
public function distort ( $ image , $ width , $ height , $ bg ) { $ contents = imagecreatetruecolor ( $ width , $ height ) ; $ X = $ this -> rand ( 0 , $ width ) ; $ Y = $ this -> rand ( 0 , $ height ) ; $ phase = $ this -> rand ( 0 , 10 ) ; $ scale = 1.1 + $ this -> rand ( 0 , 10000 ) / 30000 ; for ( $ x = 0 ; $ x < $ width ; $ x ++ ) { for ( $ y = 0 ; $ y < $ height ; $ y ++ ) { $ Vx = $ x - $ X ; $ Vy = $ y - $ Y ; $ Vn = sqrt ( $ Vx * $ Vx + $ Vy * $ Vy ) ; if ( $ Vn != 0 ) { $ Vn2 = $ Vn + 4 * sin ( $ Vn / 30 ) ; $ nX = $ X + ( $ Vx * $ Vn2 / $ Vn ) ; $ nY = $ Y + ( $ Vy * $ Vn2 / $ Vn ) ; } else { $ nX = $ X ; $ nY = $ Y ; } $ nY = $ nY + $ scale * sin ( $ phase + $ nX * 0.2 ) ; if ( $ this -> interpolation ) { $ p = $ this -> interpolate ( $ nX - floor ( $ nX ) , $ nY - floor ( $ nY ) , $ this -> getCol ( $ image , floor ( $ nX ) , floor ( $ nY ) , $ bg ) , $ this -> getCol ( $ image , ceil ( $ nX ) , floor ( $ nY ) , $ bg ) , $ this -> getCol ( $ image , floor ( $ nX ) , ceil ( $ nY ) , $ bg ) , $ this -> getCol ( $ image , ceil ( $ nX ) , ceil ( $ nY ) , $ bg ) ) ; } else { $ p = $ this -> getCol ( $ image , round ( $ nX ) , round ( $ nY ) , $ bg ) ; } if ( $ p == 0 ) { $ p = $ bg ; } imagesetpixel ( $ contents , $ x , $ y , $ p ) ; } } return $ contents ; }
Distorts the image
Distorts the image