37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php declare(strict_types=1);
 | 
						|
 | 
						|
namespace App\Captcha\Images;
 | 
						|
 | 
						|
use App\Captcha\Contracts\ImageLines;
 | 
						|
use Illuminate\Support\Arr;
 | 
						|
use App\Captcha\Contracts\Image as ImageContract;
 | 
						|
 | 
						|
class Lines implements ImageLines
 | 
						|
{
 | 
						|
    public function processing(ImageContract $image, array $colors, $lines = 3): ImageContract
 | 
						|
    {
 | 
						|
        $imageWidth = $image->getWidth();
 | 
						|
        $imageHeight = $image->getHeight();
 | 
						|
        for ($i = 0; $i <= $lines; $i++) {
 | 
						|
            $image->addLine(
 | 
						|
                x1: mt_rand(0, $imageWidth) + $i * mt_rand(0, $imageHeight),
 | 
						|
                y1: mt_rand(0, $imageHeight),
 | 
						|
                x2: mt_rand(0, $imageWidth),
 | 
						|
                y2: mt_rand(0, $imageHeight),
 | 
						|
                hexColor: $this->lineColors($colors)
 | 
						|
            );
 | 
						|
        }
 | 
						|
 | 
						|
        return $image;
 | 
						|
    }
 | 
						|
 | 
						|
    private function lineColors(array $colors): string
 | 
						|
    {
 | 
						|
        if (!empty($colors)) {
 | 
						|
            return Arr::random($colors);
 | 
						|
        }
 | 
						|
 | 
						|
        return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
 | 
						|
    }
 | 
						|
}
 |