在个人项目中,我需要从一个使用php Imagine库(http://imagine.readthedocs.io)实现ImageInterface
(图像)宽度和高度的对象获取。
我需要解决的具体问题是以调整大小的图像保持原始宽高比的方式调整图像大小,如下面的类所示:
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等库,例如:Get image height and width PHP而不是Imagine库。
答案 0 :(得分:1)
您可以使用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
答案 1 :(得分:0)
您可以使用缩略图功能上的“插入”模式缩放图像并保持其尺寸:
$size = new Imagine\Image\Box(40, 40);
$mode = Imagine\Image\ImageInterface::THUMBNAIL_INSET;
$imagine->open('/path/to/large_image.jpg')
->thumbnail($size, $mode)
->save('/path/to/thumbnail.png')
;