getRealPath()); if (!$imageInfo) { return $file->store($directory, 'public'); } $mime = $imageInfo['mime']; $source = null; switch ($mime) { case 'image/jpeg': $source = imagecreatefromjpeg($file->getRealPath()); break; case 'image/png': $source = imagecreatefrompng($file->getRealPath()); break; case 'image/gif': $source = imagecreatefromgif($file->getRealPath()); break; case 'image/webp': $source = imagecreatefromwebp($file->getRealPath()); break; default: // 不支援的格式直接存 return $file->store($directory, 'public'); } if (!$source) { return $file->store($directory, 'public'); } // 確保支援真彩色 (解決 palette image 問題) if (!imageistruecolor($source)) { imagepalettetotruecolor($source); } // 確保目錄存在 Storage::disk('public')->makeDirectory($directory); $fullPath = Storage::disk('public')->path($path); // 轉換並儲存 imagewebp($source, $fullPath, $quality); imagedestroy($source); return $path; } }