我正在检查这个laravel库以压缩用户上传的图像。http://image.intervention.io/
我想知道这对于用户上传的图片(对于个人资料图片)是否是一个好主意?如果用户上传尺寸为1400x600的图片并将其调整为200x200,该怎么办?它会是一个伸展的形象吗?
答案 0 :(得分:5)
是的,它会被拉长。您想尝试fit()
方法:
结合裁剪和调整大小以智能方式格式化图像。该 方法将找到您给定宽度的最佳拟合宽高比 自动调整当前图像的高度,将其剪切并调整大小 给定的维度。
// crop the best fitting 1:1 ratio (200x200) and resize to 200x200 pixel
$img->fit(200);
答案 1 :(得分:3)
干预非常适合处理这个问题。这是一个快速的代码段,可以帮助您朝着正确的方向前进:
$resize_to = $this->sizes(); //some arbitrary array
//generate our custom image sizes
foreach ($resize_to as $idx => $width) {
if ($img = Image::make($file->getRealPath())) {
$img->resize(width, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
$img->encode($encoding_options);
$img->save($path);
}
}
在上面我们循环了一些我们想要调整图像大小的宽度数组。请注意我们在下面声明的$constraints
。 aspectRatio()
确保图像永远不会失去它的纵横比。 ->upsize()
可防止图像升迁并失去分辨率。
您要求的内容 - 将1400x600图片的大小调整为200x200
是不合理的。
相反,您应该只调整一个维度,并确保您的HTML可以解决其余问题。例如,在上面我们只观察widths
。所以我们假设在你的$this->sizes()
阵列中,其中一个是200.但是图像的比例是不同的,所以它没有产生200x200,它产生了200x150。使用flexbox超级轻松处理HTML中的内容:
<div class="flex-box-centered">
<img class="flex-img" src="..."/>
</div>
CSS:
.flex-box-centered {
display:flex;
width:200px;
height:200px;
justify-content:center;
align-items:center;
background:#fff;
}
.flex-img {
display:flex;
width:100%;
height:auto;
}
答案 2 :(得分:1)
将$image
中的图片作为Intervention\Image\Image
加载后,您可以轻松地执行此操作:
// $height and $width are your max values
if ($image->width < $image->height) {
$image->resize(null, $height, true, false);
} else {
$image->resize($width, null, true, false);
}
将以正确的方式调整图像大小。
答案 3 :(得分:1)
// open and resize an image file
$img = Image::make('public/foo.jpg')->resize(300, 200);
// save file as jpg with medium quality
$img->save('public/bar.jpg', 60);
图像质量范围从0(质量差,文件小)到100(最佳质量,大文件)。
答案 4 :(得分:0)
作曲家需要干预/图像
// config / app.php
return [
......
$provides => [
......
......,
'Intervention\Image\ImageServiceProvider'
],
$aliases => [
.....
.....,
'Image' => 'Intervention\Image\Facades\Image'
]
]
/ *控制器代码
/*With Image Compression*/
$image = $request->file('profile_image');
$fileExtension = strtolower($image->getClientOriginalExtension());
$file_name = sha1(uniqid().$image.uniqid()).'.'.$fileExtension;
$destinationPath = 'uploads/profile_image/';
$img = Image::make($image->getRealPath());
$img->resize(140, 140, function ($constraint) {
$constraint->aspectRatio();
})->save($destinationPath.$file_name);
/*End With Image Compression*/
答案 5 :(得分:0)
我得到原始图片,然后将大小调整为 50%,这样可以保持更好的比例。所以它对用户来说看起来不错。
$imageDimensions = getimagesize($image);
$width = $imageDimensions[0];
$height = $imageDimensions[1];
$new_width = $imageDimensions[0] * 0.5;
$new_height = ceil($height * ($new_width / $width));
$image = Image::make($image)->resize($new_width, $new_height);
我首先获得正常尺寸,然后进行计算以正确调整其大小。