我想限制图片只有在超过 最大尺寸同时保持原始比例不变的情况下才能约束图像。
所以,让我们说我的参数是最大高度和宽度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) );
这不起作用。仅应用第一个调整大小,在本例中为宽度。
然而,事实证明原始代码确实有效。我只是假设它不会,但确实如此。
答案 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;
}
}