【问题标题】:Resize image in Laravel 5.2在 Laravel 5.2 中调整图像大小
【发布时间】:2017-03-14 12:00:09
【问题描述】:

谁能帮助我如何在 Laravel 中实现调整图像大小?

我只有这个代码:

if($request->hasFile('image')){
    if (Input::file('image')->isValid()) {
        $file = Input::file('image');
        $destination = base_path() . '/public/images/ServiceImages';
        $extension = Input::file('image')->getClientOriginalExtension();
        $fileName = rand(111,99999).'.'.$extension;

        if(!empty($data['Image'])){
            unlink($destination.$data['Image']);
        }

        $file->move($destination, $fileName);
        $service->image=$fileName;
    }
}

【问题讨论】:

标签: php laravel-5.2


【解决方案1】:

Laravel 没有默认的图片大小调整。但是大多数 Laravel 开发人员在处理图像时使用“图像干预”。它易于使用。

安装(图片干预):

第一步运行

composer require intervention/image

第 2 步在您的 config/app.php 中:

在 $providers 数组中,添加以下内容:

Intervention\Image\ImageServiceProvider::class

在 $aliases 数组中,添加以下内容:

'Image' => Intervention\Image\Facades\Image::class

如果您遇到问题,您的 GD 库丢失,请安装它

  • PHP5:sudo apt-get install php5-gd
  • PHP7:sudo apt-get install php7.0-gd

在您的控制器上使用。

第 3 步

在你的控制器之上

use Intervention\Image\ImageManagerStatic as Image;

第 4 步

关于你的方法(有几种方法,但这会给你一个想法)

if($request->hasFile('image')) {

    $image       = $request->file('image');
    $filename    = $image->getClientOriginalName();

    $image_resize = Image::make($image->getRealPath());              
    $image_resize->resize(300, 300);
    $image_resize->save(public_path('images/ServiceImages/' .$filename));

}

参考here

【讨论】:

  • 你会因此得到我的 +1。谢谢。
  • 这个库的一个限制是 - 它不能将上传的图像保存在新目录中。
  • 调整图片大小会减小它们的大小吗?
  • @Sanaulla 这个包的主要缺点是丢失了图像的 DPI(每英寸点数)
  • @YoussefBoudaya 是的,它也减小了大小
【解决方案2】:

我会推荐 Intervention Image 来完成这项任务。

只需使用 composer 安装它

composer require intervention/image

然后像这样使用它:

\Intervention\Image\ImageManagerStatic::make('public/foo')->fit(100)->save($path);

备注

  • 服务提供商 干预镜像为 Laravel 提供了一个服务提供者。您可以按照here 的说明手动添加服务提供商。之后,您可以将配置文件推送到 Laravel。但是,配置只有一个选项,那就是图像驱动程序。 gd 是默认的,所以如果你不想改变它,不需要使用服务提供者和配置。

  • 别名 您可以在config/app 中创建别名,而不是服务提供者:

    'Image' => Intervention\Image\ImageManagerStatic::class
    

    那么你可以这样使用它:

    \Image::make('public/foo')->fit(100)->save($path);
    
  • 测试 使用干预图像时,您仍然可以使用 Laravel 的 file upload tests。详情见How to fake image upload for testing with Intervention image package using Laravel

【讨论】:

    【解决方案3】:

    虽然这是一个旧帖子,但我考虑发布一个独立于安装任何软件包的解决方案。

    $image = $request->file('image');
    
    $image_name = rand(111111, 888999)*time() .'.'. $image->getClientOriginalExtension();
    $thumb_name = rand(111111, 888999)*time() .'.'. $image->getClientOriginalExtension();
    $destinationPath = public_path('/uploads');
    
    $image->move($destinationPath, $image_name);
    $orgImgPath = $destinationPath. '/'.$image_name;
    $thumbPath = $destinationPath. '/'.$thumb_name;
    shell_exec("convert $orgImgPath -resize 200x200\! $thumbPath");
    

    这会强制将您的图像大小调整为 200x200,因为但是如果你想保持纵横比的话!需要删除。此代码将保存原始上传并生成缩略图。

    【讨论】:

    • 但它需要您访问命令行,许多托管服务提供商不允许这样做。
    猜你喜欢
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2018-11-08
    • 2016-02-16
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多