1

在个人项目中,我需要使用 php Imagine 库( http://imagine.readthedocs.ioImageInterface )从实现(图像)宽度和高度的对象中获取。

我需要解决的具体问题是以调整后的图像保持原始纵横比的方式调整图像的大小,如下面的课程所示:

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,而不是想象一个。

4

2 回答 2

2

您可以使用以下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));
于 2017-05-27T15:51:13.120 回答
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')
;
于 2019-04-22T20:55:55.423 回答