使用最大宽度/高度调整大小,同时使用Laravel中的干预图像保持原始比例

时间:2016-11-07 14:44:11

标签: php laravel image-manipulation

我想限制图片只有在超过 最大尺寸同时保持原始比例不变的情况下才能约束图像。

所以,让我们说我的参数是最大高度和宽度600。

1000x1000的图像将变为600x600,非常简单。

2000x1000的图像将变为600x300。这意味着两个值中的最高值变为600,而另一个值按比例受到限制。

像这样的东西

            $image->resize(600, 600, function ($constraint) {
                $constraint->aspectRatio();
            });

最好的方法是什么?

修改

根据评论,我试过这个:

    $medium = Image::make($file);

    $medium->resize(null, 500, function ($constraint) {
        $constraint->aspectRatio();
    });

    $medium->resize(500, null, function ($constraint) {
        $constraint->aspectRatio();
    });             
    $medium->save( public_path('/uploads/artistUploads/medium-' . $filename , 90) );    

这不起作用。仅应用第一个调整大小,在本例中为宽度。

然而,事实证明原始代码确实有效。我只是假设它不会,但确实如此。

5 个答案:

答案 0 :(得分:9)

根据Image Intervention Docs,您可以通过3种简单方式完成此操作

// resize the image to a width of 300 and constraint aspect ratio (auto height)
$img->resize(300, null, function ($constraint) {
    $constraint->aspectRatio();
});

// resize the image to a height of 200 and constraint aspect ratio (auto width)
$img->resize(null, 200, function ($constraint) {
    $constraint->aspectRatio();
});

// prevent possible upsizing
$img->resize(null, 400, function ($constraint) {
    $constraint->aspectRatio();
    $constraint->upsize();
});

希望这会有所帮助......

答案 1 :(得分:6)

我知道我在比赛中有点迟,但我有你想要的答案:

$width = 600; // your max width
$height = 600; // your max height
$img = IMG::make($uploaded_file);
$img->height() > $img->width() ? $width=null : $height=null;
$img->resize($width, $height, function ($constraint) {
    $constraint->aspectRatio();
});
  

1000x1000的图像将变为600x600。

     

2000x1000的图像将变为600x300。这意味着   两个值中的最高值变为600,而另一个值变为600   按比例约束。

这就是这段代码的作用。希望我能帮助别人。

答案 2 :(得分:1)

您可以使用widen()heighten()方法。

widen()

  

将当前图像调整为新宽度,约束纵横比。将可选的Closure回调作为第三个参数传递,以应用其他约束,例如防止可能的升迁。

heighten()

  

将当前图像调整为新高度,约束纵横比。将可选的Closure回调作为第三个参数传递,以应用其他约束,例如防止可能的升迁。

或者您可以使用aspectRatio()约束。 resize()文档中的示例:

// resize the image to a width of 300 and constrain aspect ratio (auto height)
$img->resize(300, null, function ($constraint) {
    $constraint->aspectRatio();
});

// resize the image to a height of 200 and constrain aspect ratio (auto width)
$img->resize(null, 200, function ($constraint) {
    $constraint->aspectRatio();
});

答案 3 :(得分:0)

因此,我在构建图像预览组件时发现,如果将max-width,max-height设置为max值,然后将width,height设置为auto,则图像长宽比将保持不变。
https://codepen.io/kriss-robert/pen/aaNaZR?editors=1100

max-width: 100%;
max-height: 100%;
width: auto;
height: auto;

希望这对任何人都有帮助:D

答案 4 :(得分:0)

这是我做类似工作的模板

<?php

namespace App\ImageSize;

use Intervention\Image\Image;
use Intervention\Image\Filters\FilterInterface;

class Large implements FilterInterface
{
    public function applyFilter(Image $image)
    {
        $w = $image->width();
        $h = $image->height();
        if($w > $h) {
            $image->resize(1000, null, function ($constraint) {
                $constraint->aspectRatio();
            });
        } else {
            $image->resize(null, 1000, function ($constraint) {
                $constraint->aspectRatio();
            });
        }

        return $image;

    }
}