В личном проекте мне нужно получить объект, который реализует ImageInterface
(изображение) ширина и высота с использованием библиотеки php Imagine (http://imagine.readthedocs.io).
Конкретная проблема, которую мне нужно решить, — изменить размер изображения таким образом, чтобы изображение с измененным размером сохраняло исходное соотношение сторон, как вы можете видеть в следующем классе:
namespace PcMagas\AppImageBundle\Filters\Resize;
use PcMagas\AppImageBundle\Filters\AbstractFilter;
use Imagine\Image\ImageInterface;
use PcMagas\AppImageBundle\Filters\ParamInterface;
use PcMagas\AppImageBundle\Exceptions\IncorectImageProssesingParamsException;
class ResizeToLimitsKeepintAspectRatio extends AbstractFilter
{
public function apply(ImageInterface $image, ParamInterface $p)
{
/**
* @var ResizeParams $p
*/
if(! $p instanceof ResizeParams){
throw new IncorectImageProssesingParamsException(ResizeParams::class);
}
/**
* @var float $imageAspectRatio
*/
$imageAspectRatio=$this->calculateImageAspectRatio($image);}
/**
* @param ImageInterface $image
* @return float
*/
private function calculateImageAspectRatio(ImageInterface $image)
{
//Calculate the Image's Aspect Ratio
}
}
Но как я могу получить ширину и высоту изображения?
Все решения, которые я нашел, напрямую используют библиотеки gd, imagick и т. Д., Такие как: Получить высоту и ширину изображения PHP а не представь себе.
Вы можете использовать getSize()
метод для этого:
/**
* @param ImageInterface $image
* @return float
*/
private function calculateImageAspectRatio(ImageInterface $image)
{
//Calculate the Image's Aspect Ratio
$size = $image->getSize(); // returns a BoxInterface
$width = $size->getWidth();
$height = $size->getHeight();
return $width / $height; // or $height / $width, depending on your usage
}
Хотя, если вы хотите изменить размер с соотношением сторон, вы также можете использовать scale()
метод для BoxInterface
чтобы получить новые измерения, не вычисляя их самостоятельно:
$size = $image->getSize();
$width = $size->getWidth(); // 640
$height = $size->getHeight(); // 480
$size->scale(1.25); // increase 25%
$width = $size->getWidth(); // 800
$height = $size->getHeight(); // 600
// or, as a quick example to scale an image up by 25% immediately:
$image->resize($image->getSize()->scale(1.25));
Других решений пока нет …