2017-05-27 20 views
0

個人的なプロジェクトでは、ImageInterface(画像)を実装するには、PHPのImagineライブラリ(http://imagine.readthedocs.io)を使用して幅と高さを実装する必要があります。PHP画像の幅と高さを取得する

私は解決する必要がある特定の問題は、あなたが以下のクラスで見ることができるようにリサイズした画像は元の縦横比を維持していることのように画像のサイズを変更することです:

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 
    } 
} 

しかし、どのように、私は得ることができます画像の幅と高さ?

私が見つけたすべての解決策は、Get image height and width PHPなどのgd、imagickなどのライブラリを直接使用していますが、想像してはいません。計算せずにアスペクト比のサイズを変更したい場合は

/** 
* @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 
} 

が、あなたはまた、新しい測定結果を得るためにBoxInterfaceためscale()方法を使用することができ、けれども:

答えて

1

は、あなたはそのためのgetSize()方法を使用することができます

$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)); 
+1

問題は、最大の幅と高さを持つボックスを提供し、比率Ratioと提供されたBoxに適合するようにスケールしたいということです。 –

+0

ああ。次に、手作業で計算する必要があります。私はImagineがすぐに使えるものをサポートしているとは思いません。 – rickdenhaan

+0

これは私がやっていることです;) –

関連する問題