Version 0.7.0 #1
8
app/Captcha/Contracts/ImageLines.php
Normal file
8
app/Captcha/Contracts/ImageLines.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Captcha\Contracts;
|
||||
|
||||
interface ImageLines
|
||||
{
|
||||
public function processing(Image $image, array $colors, int $lines = 3): Image;
|
||||
}
|
36
app/Captcha/Images/Lines.php
Normal file
36
app/Captcha/Images/Lines.php
Normal file
@ -0,0 +1,36 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user