Файл: vendor/intervention/image/src/Drivers/Gd/Modifiers/ResizeModifier.php
Строк: 92
<?php
declare(strict_types=1);
namespace InterventionImageDriversGdModifiers;
use InterventionImageDriversGdCloner;
use InterventionImageExceptionsDriverException;
use InterventionImageExceptionsInvalidArgumentException;
use InterventionImageExceptionsModifierException;
use InterventionImageInterfacesFrameInterface;
use InterventionImageInterfacesImageInterface;
use InterventionImageInterfacesSizeInterface;
use InterventionImageInterfacesSpecializedInterface;
use InterventionImageModifiersResizeModifier as GenericResizeModifier;
class ResizeModifier extends GenericResizeModifier implements SpecializedInterface
{
/**
* {@inheritdoc}
*
* @see ModifierInterface::apply()
*
* @throws InvalidArgumentException
* @throws ModifierException
* @throws DriverException
*/
public function apply(ImageInterface $image): ImageInterface
{
$resizeTo = $this->adjustedSize($image);
foreach ($image as $frame) {
$this->resizeFrame($frame, $resizeTo);
}
return $image;
}
/**
* @throws InvalidArgumentException
* @throws ModifierException
* @throws DriverException
*/
private function resizeFrame(FrameInterface $frame, SizeInterface $resizeTo): void
{
// create empty canvas in target size
$modified = Cloner::cloneEmpty($frame->native(), $resizeTo);
// copy content from resource
imagecopyresampled(
$modified,
$frame->native(),
$resizeTo->pivot()->x(),
$resizeTo->pivot()->y(),
0,
0,
$resizeTo->width(),
$resizeTo->height(),
$frame->size()->width(),
$frame->size()->height(),
);
// set new content as resource
$frame->setNative($modified);
}
/**
* Return the size the modifier will resize to
*/
protected function adjustedSize(ImageInterface $image): SizeInterface
{
return $image->size()->resize($this->width, $this->height);
}
}