干预图像长宽比

问题描述 投票:0回答:5

我想通过 Laravel 4 中的干预图像功能调整图像大小,但为了保持图像的纵横比,我的代码如下所示:

$image_make         = Image::make($main_picture->getRealPath())->fit('245', '245', function($constraint) { $constraint->aspectRatio(); })->save('images/articles/'.$gender.'/thumbnails/245x245/'.$picture_name);

问题是这不能保持我的图像的纵横比,谢谢。

image image-processing laravel-4
5个回答
36
投票

如果您需要在限制范围内调整大小,则应该使用

resize
而不是
fit
。如果您还需要将图像置于约束内居中,则应创建一个新的
canvas
并在其中插入调整大小的图像:

// This will generate an image with transparent background
// If you need to have a background you can pass a third parameter (e.g: '#000000')
$canvas = Image::canvas(245, 245);

$image  = Image::make($main_picture->getRealPath())->resize(245, 245, function($constraint)
{
    $constraint->aspectRatio();
});

$canvas->insert($image, 'center');
$canvas->save('images/articles/'.$gender.'/thumbnails/245x245/'.$picture_name);

12
投票

只需将其调整为图像的最大宽度/高度,然后使画布适合所需的最大宽度和高度

Image::make($main_picture->getRealPath())->resize(245, 245,
    function ($constraint) {
        $constraint->aspectRatio();
    })
->resizeCanvas(245, 245)
->save('images/articles/'.$gender.'/thumbnails/245x245/'.$picture_name, 80);

7
投票

我知道这是一个旧线程,但如果有一天有人需要它,我正在分享我的实现。

我的实现是查看接收到的图像的长宽比,并根据新的高度或宽度调整大小(如果需要)。

public function resizeImage($image, $requiredSize) {
    $width = $image->width();
    $height = $image->height();

    // Check if image resize is required or not
    if ($requiredSize >= $width && $requiredSize >= $height) return $image;

    $newWidth;
    $newHeight;

    $aspectRatio = $width/$height;
    if ($aspectRatio >= 1.0) {
        $newWidth = $requiredSize;
        $newHeight = $requiredSize / $aspectRatio;
    } else {
        $newWidth = $requiredSize * $aspectRatio;
        $newHeight = $requiredSize;
    }


    $image->resize($newWidth, $newHeight);
    return $image;
}

您需要传递图像(

$image = Image::make($fileImage->getRealPath());
)和所需的尺寸(例如:
480
)。

这是输出

  1. 上传图片:
    100x100
    。什么都不会发生,因为宽度 且高度小于所需的
    480
    尺寸。
  2. 上传图片:
    3000x1200
    。这是风景图像,将调整大小为:
    480x192
    (保持纵横比)
  3. 上传图片:
    980x2300
    。这是肖像图像,将调整大小为:
    204x480
  4. 上传图片:
    1000x1000
    。这是宽度和高度相等的 1:1 纵横比图像。其大小将调整为:
    480x480

1
投票

您需要在宽度或高度中使用

null

$img->resize(300, null, function ($constraint) { $constraint->aspectRatio(); });

$img->resize(null, 200, function ($constraint) { $constraint->aspectRatio(); });

0
投票

如果有人对新干预图像的长宽比有疑问, 使用

intervention/image-laravel

你可以这样做:

$targetWidth = 60;
$interventionImage = Image::read($file);
$width = $interventionImage->width();
$height = $interventionImage->height();
$aspectRatio = $width / $height;
$targetHeight = round($targetWidth / $aspectRatio);
$interventionImage->resize($targetWidth, $targetHeight);

这样,您将始终获得具有目标宽度的正确纵横比。

© www.soinside.com 2019 - 2024. All rights reserved.