mirror of
https://github.com/Intervention/image.git
synced 2025-08-23 22:12:51 +02:00
Refactor draw modifiers
This commit is contained in:
@@ -11,20 +11,20 @@ class DrawEllipseModifier extends AbstractDrawModifier implements ModifierInterf
|
||||
public function apply(ImageInterface $image): ImageInterface
|
||||
{
|
||||
return $image->eachFrame(function ($frame) {
|
||||
if ($this->drawable()->hasBorder()) {
|
||||
if ($this->ellipse()->hasBorder()) {
|
||||
// slightly smaller ellipse to keep 1px bordered edges clean
|
||||
if ($this->drawable()->hasBackgroundColor()) {
|
||||
if ($this->ellipse()->hasBackgroundColor()) {
|
||||
imagefilledellipse(
|
||||
$frame->getCore(),
|
||||
$this->position->getX(),
|
||||
$this->position->getY(),
|
||||
$this->drawable()->getWidth() - 1,
|
||||
$this->drawable()->getHeight() - 1,
|
||||
$this->ellipse()->getWidth() - 1,
|
||||
$this->ellipse()->getHeight() - 1,
|
||||
$this->getBackgroundColor()->toInt()
|
||||
);
|
||||
}
|
||||
|
||||
imagesetthickness($frame->getCore(), $this->drawable()->getBorderSize());
|
||||
imagesetthickness($frame->getCore(), $this->ellipse()->getBorderSize());
|
||||
|
||||
// gd's imageellipse doesn't respect imagesetthickness so i use
|
||||
// imagearc with 359.9 degrees here.
|
||||
@@ -32,8 +32,8 @@ class DrawEllipseModifier extends AbstractDrawModifier implements ModifierInterf
|
||||
$frame->getCore(),
|
||||
$this->position->getX(),
|
||||
$this->position->getY(),
|
||||
$this->drawable()->getWidth(),
|
||||
$this->drawable()->getHeight(),
|
||||
$this->ellipse()->getWidth(),
|
||||
$this->ellipse()->getHeight(),
|
||||
0,
|
||||
359.99,
|
||||
$this->getBorderColor()->toInt()
|
||||
@@ -43,8 +43,8 @@ class DrawEllipseModifier extends AbstractDrawModifier implements ModifierInterf
|
||||
$frame->getCore(),
|
||||
$this->position->getX(),
|
||||
$this->position->getY(),
|
||||
$this->drawable()->getWidth(),
|
||||
$this->drawable()->getHeight(),
|
||||
$this->ellipse()->getWidth(),
|
||||
$this->ellipse()->getHeight(),
|
||||
$this->getBackgroundColor()->toInt()
|
||||
);
|
||||
}
|
||||
|
@@ -3,9 +3,6 @@
|
||||
namespace Intervention\Image\Drivers\Gd\Modifiers;
|
||||
|
||||
use Intervention\Image\Drivers\Abstract\Modifiers\AbstractDrawModifier;
|
||||
use Intervention\Image\Exceptions\GeometryException;
|
||||
use Intervention\Image\Geometry\Line;
|
||||
use Intervention\Image\Interfaces\DrawableInterface;
|
||||
use Intervention\Image\Interfaces\ImageInterface;
|
||||
use Intervention\Image\Interfaces\ModifierInterface;
|
||||
|
||||
@@ -16,24 +13,12 @@ class DrawLineModifier extends AbstractDrawModifier implements ModifierInterface
|
||||
return $image->eachFrame(function ($frame) {
|
||||
imageline(
|
||||
$frame->getCore(),
|
||||
$this->drawable()->getStart()->getX(),
|
||||
$this->drawable()->getStart()->getY(),
|
||||
$this->drawable()->getEnd()->getX(),
|
||||
$this->drawable()->getEnd()->getY(),
|
||||
$this->line()->getStart()->getX(),
|
||||
$this->line()->getStart()->getY(),
|
||||
$this->line()->getEnd()->getX(),
|
||||
$this->line()->getEnd()->getY(),
|
||||
$this->getBackgroundColor()->toInt()
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public function drawable(): DrawableInterface
|
||||
{
|
||||
$drawable = parent::drawable();
|
||||
if (!is_a($drawable, Line::class)) {
|
||||
throw new GeometryException(
|
||||
'Shape mismatch. Excepted Line::class, found ' . get_class($drawable)
|
||||
);
|
||||
}
|
||||
|
||||
return $drawable;
|
||||
}
|
||||
}
|
||||
|
@@ -12,26 +12,26 @@ class DrawRectangleModifier extends AbstractDrawModifier implements ModifierInte
|
||||
{
|
||||
$image->eachFrame(function ($frame) {
|
||||
// draw background
|
||||
if ($this->drawable()->hasBackgroundColor()) {
|
||||
if ($this->rectangle()->hasBackgroundColor()) {
|
||||
imagefilledrectangle(
|
||||
$frame->getCore(),
|
||||
$this->position->getX(),
|
||||
$this->position->getY(),
|
||||
$this->position->getX() + $this->drawable()->bottomRightPoint()->getX(),
|
||||
$this->position->getY() + $this->drawable()->bottomRightPoint()->getY(),
|
||||
$this->position->getX() + $this->rectangle()->bottomRightPoint()->getX(),
|
||||
$this->position->getY() + $this->rectangle()->bottomRightPoint()->getY(),
|
||||
$this->getBackgroundColor()->toInt()
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->drawable()->hasBorder()) {
|
||||
if ($this->rectangle()->hasBorder()) {
|
||||
// draw border
|
||||
imagesetthickness($frame->getCore(), $this->drawable()->getBorderSize());
|
||||
imagesetthickness($frame->getCore(), $this->rectangle()->getBorderSize());
|
||||
imagerectangle(
|
||||
$frame->getCore(),
|
||||
$this->position->getX(),
|
||||
$this->position->getY(),
|
||||
$this->position->getX() + $this->drawable()->bottomRightPoint()->getX(),
|
||||
$this->position->getY() + $this->drawable()->bottomRightPoint()->getY(),
|
||||
$this->position->getX() + $this->rectangle()->bottomRightPoint()->getX(),
|
||||
$this->position->getY() + $this->rectangle()->bottomRightPoint()->getY(),
|
||||
$this->getBorderColor()->toInt()
|
||||
);
|
||||
}
|
||||
|
@@ -18,16 +18,16 @@ class DrawEllipseModifier extends AbstractDrawModifier implements ModifierInterf
|
||||
$drawing = new ImagickDraw();
|
||||
$drawing->setFillColor($this->getBackgroundColor()->getPixel());
|
||||
|
||||
if ($this->drawable()->hasBorder()) {
|
||||
$drawing->setStrokeWidth($this->drawable()->getBorderSize());
|
||||
if ($this->ellipse()->hasBorder()) {
|
||||
$drawing->setStrokeWidth($this->ellipse()->getBorderSize());
|
||||
$drawing->setStrokeColor($this->getBorderColor()->getPixel());
|
||||
}
|
||||
|
||||
$drawing->ellipse(
|
||||
$this->position->getX(),
|
||||
$this->position->getY(),
|
||||
$this->drawable()->getWidth() / 2,
|
||||
$this->drawable()->getHeight() / 2,
|
||||
$this->ellipse()->getWidth() / 2,
|
||||
$this->ellipse()->getHeight() / 2,
|
||||
0,
|
||||
360
|
||||
);
|
||||
|
@@ -4,9 +4,6 @@ namespace Intervention\Image\Drivers\Imagick\Modifiers;
|
||||
|
||||
use ImagickDraw;
|
||||
use Intervention\Image\Drivers\Abstract\Modifiers\AbstractDrawModifier;
|
||||
use Intervention\Image\Exceptions\GeometryException;
|
||||
use Intervention\Image\Geometry\Line;
|
||||
use Intervention\Image\Interfaces\DrawableInterface;
|
||||
use Intervention\Image\Interfaces\ImageInterface;
|
||||
use Intervention\Image\Interfaces\ModifierInterface;
|
||||
|
||||
@@ -16,27 +13,16 @@ class DrawLineModifier extends AbstractDrawModifier implements ModifierInterface
|
||||
{
|
||||
$drawing = new ImagickDraw();
|
||||
$drawing->setStrokeColor($this->getBackgroundColor()->getPixel());
|
||||
$drawing->setStrokeWidth($this->drawable()->getWidth());
|
||||
$drawing->setStrokeWidth($this->line()->getWidth());
|
||||
$drawing->line(
|
||||
$this->drawable()->getStart()->getX(),
|
||||
$this->drawable()->getStart()->getY(),
|
||||
$this->drawable()->getEnd()->getX(),
|
||||
$this->drawable()->getEnd()->getY(),
|
||||
$this->line()->getStart()->getX(),
|
||||
$this->line()->getStart()->getY(),
|
||||
$this->line()->getEnd()->getX(),
|
||||
$this->line()->getEnd()->getY(),
|
||||
);
|
||||
|
||||
return $image->eachFrame(function ($frame) use ($drawing) {
|
||||
$frame->getCore()->drawImage($drawing);
|
||||
});
|
||||
}
|
||||
|
||||
public function drawable(): DrawableInterface
|
||||
{
|
||||
$drawable = parent::drawable();
|
||||
if (!is_a($drawable, Line::class)) {
|
||||
throw new GeometryException(
|
||||
'Shape mismatch. Excepted Line::class, found ' . get_class($drawable)
|
||||
);
|
||||
}
|
||||
|
||||
return $drawable;
|
||||
}
|
||||
}
|
||||
|
@@ -17,17 +17,17 @@ class DrawRectangleModifier extends AbstractDrawModifier implements ModifierInte
|
||||
// setup rectangle
|
||||
$drawing = new ImagickDraw();
|
||||
$drawing->setFillColor($this->getBackgroundColor()->getPixel());
|
||||
if ($this->drawable()->hasBorder()) {
|
||||
if ($this->rectangle()->hasBorder()) {
|
||||
$drawing->setStrokeColor($this->getBorderColor()->getPixel());
|
||||
$drawing->setStrokeWidth($this->drawable()->getBorderSize());
|
||||
$drawing->setStrokeWidth($this->rectangle()->getBorderSize());
|
||||
}
|
||||
|
||||
// build rectangle
|
||||
$drawing->rectangle(
|
||||
$this->position->getX(),
|
||||
$this->position->getY(),
|
||||
$this->position->getX() + $this->drawable()->bottomRightPoint()->getX(),
|
||||
$this->position->getY() + $this->drawable()->bottomRightPoint()->getY()
|
||||
$this->position->getX() + $this->rectangle()->bottomRightPoint()->getX(),
|
||||
$this->position->getY() + $this->rectangle()->bottomRightPoint()->getY()
|
||||
);
|
||||
|
||||
$image->eachFrame(function ($frame) use ($drawing) {
|
||||
|
Reference in New Issue
Block a user