使用 Laravel 儲存並重新縮放圖片大小

前言

本篇為實際上使用Laravel,以及套件Intervention來儲存及重新修改圖片尺寸的學習筆記。

安裝套件Intervention

安裝流程請參照 Intervention GitHub官網

composer require intervention/image
  • 打開config/app.php, 在array $providers 裏頭加上
    Intervention\Image\ImageServiceProvider::class
  • 在array aliases裏頭加上
    'Image' => Intervention\Image\Facades\Image::class

建立上傳資料夾與storage資料夾的連結

  • 依照官網說明建立連結

    • 在terminal輸入
      php artisan storage:link
  • 連結之後,project/storage/app/public 會跟 project/public/storage這兩個資料夾就回相連。

    • 如果你是要儲存檔案,請儲存到project/storage/app/public/(anySubdirectoryYouWant)
    • 如果你是要提供外部存取的URL,請使用project/public/storage/(anySubdirectoryYouWant)/fileName,因為對外部來說,預設可存取資料夾為public,所以直接使用asset('storage/(anySubdirectoryYouWant/fileName)')

驗證圖片是否有被帶進來

// 因為我們不需要太多的東西,只需要request array裡頭的東西
$parameters = request()->all();

if (request()->hasFile('image'))
{
// 檔案存在,所以存到project/storage/app/public,並拿到url,此範例會拿到public/fileName
$imageURL = request()->file('image')->store('public');
// 因為我們只想要將純粹的檔名存到資料庫,所以特別做處理
$parameters['image'] = substr($imageURL, 7);
}

重新縮放圖片大小

  • 要縮放大小,所以會需要使用到套件intervention
    • 在namespace下加上
      use Intervention\Image\ImageManagerStatic as Image;
// 拿到剛剛存進DB的item實例
$item = Item::update($parameters);

// 設定driver
Image::configure(array('driver' => 'gd'));

// 如果我們dd (storage_phth),我們將會得到'project/storage/',但這不是我們要的
// 所以我們在後面加上'app/public/,如上所敘,這是內部儲存的資料夾位址
// 請注意,當我們重新縮放圖片大小,目標都是我們的內部資料夾
// 並且,再重新縮放之後,也是要存到同樣的地方
Image::make(storage_path('app/public/' . $item->image))
->resize(300, 300)
->save(storage_path('app/public/' . $item->image));

刪除圖片(如果使用者要求)

if ($request->imageDelete == true)
{
Storage::delete($item->images);
$item->update(['images' => null]);
}

產出可存取資源的URL

// 當產出公開存取的URL,它必須要是外部存取位址
return asset('storage/' . $parameters['image']);
利用 Hexo 來建立一個 多語系 部落格 設定 Network 以及 HTTP 平衡負載器

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×