Laravel- 圖片上傳新增自動裁剪功能

lanffff發表於2019-06-19

一般在有前端使用者或者後臺自己上傳圖片的功能時,存在上傳圖片尺寸不一的情況。所以需要在使用者上傳圖片時直接二次處理限制圖片的寬度。
1.加入依賴 本人使用的是laravel5.5 composer方面是選擇的2.4元件版本
composer require intervention/image
2.在是否新增註冊這塊一直都有爭論,我這邊採取的還是選擇如果沒有自動註冊,那麼就新增手動註冊。
Intervention\Image\ImageServiceProvider::class,
'Image' => Intervention\Image\Facades\Image::class,
3.建立配置檔案 一般情況下都是使用gd模式
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
4.專案中的實際應用

      /**
     * 上傳圖片
     */
    public function image_upload(Request $req)
    {
        try {
        if ($req->isMethod('POST')) {
            $file = $req->file('file');
            //圖片寬度引數 可以寫死也可傳值接收  關閉false
            $max_width = false;
            if ($file->isValid()) {
                $realPath = $file->getRealPath();//臨時檔案路徑

            $entension = $file->getClientOriginalExtension();//上傳檔案字尾名
            $time = date('Ym');
            $newName = md5(uniqid(microtime(true), true)) . date('YmdHis') . '.' . $entension;
            $path = $file->move(base_path() . '/public/upload/image/' . $time, $newName);
            $filepath = '/upload/image/' . $time . '/' . $newName;

            // 圖片物理路徑  特別重要 如果路徑則無法識別寫入圖片
            $img = public_path().'/'.$filepath;

            //  圖片剪裁邏輯  如果限制了圖片寬度且不為gif格式,就進行裁剪
            if ($max_width && $entension != 'gif') {
                // 此類中封裝的函式,用於裁剪圖片
                $this->reduceSize($img, $max_width);
            }

            return response()->json(['status' => 0, 'msg' => '上傳成功', 'filepath' => $filepath]);
        }
    }
    } catch (Exception $e) {
        return $this->doFailure($e);
    };
}

 //圖片按寬度剪裁
public function reduceSize($img, $max_width)
{
    // 先例項化,傳參是檔案的磁碟物理路徑

    $image = Image::make($img);

    // 進行大小調整的操作
    $image->resize($max_width, null, function ($constraint) {

        // 設定寬度是 $max_width,高度等比例雙方縮放
        $constraint->aspectRatio();

        // 防止裁圖時圖片尺寸變大
        $constraint->upsize();
    });

    // 對圖片修改後進行儲存
    $image->save();
}

以上就是實現上傳圖片裁剪的方法。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章