<?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); } }