export async function compressImage(file, options = {}) {
    // 提取选项参数，设置默认值
    const { 
      quality = 0.75, 
      maxWidth = 800, 
      maxHeight = 600 
    } = options;
  
    // 验证输入是否为有效的File对象
    if (!(file instanceof File)) {
      throw new Error('输入参数必须是一个File对象');
    }
  
    // 检查文件类型是否为图片
    if (!file.type.startsWith('image/')) {
      throw new Error('输入文件必须是图片类型');
    }
  
    // 创建一个Promise来处理异步操作
    return new Promise((resolve, reject) => {
      // 创建Image对象用于加载图片
      const img = new Image();
      
      // 监听图片加载完成事件
      img.onload = () => {
        // 创建Canvas元素
        const canvas = document.createElement('canvas');
        const ctx = canvas.getContext('2d');
        
        // 获取原始图片尺寸
        let width = img.width;
        let height = img.height;
        
        // 计算调整后的尺寸（保持原始比例）
        if (width > maxWidth) {
          height = height * (maxWidth / width);
          width = maxWidth;
        }
        
        if (height > maxHeight) {
          width = width * (maxHeight / height);
          height = maxHeight;
        }
        
        // 设置Canvas尺寸
        canvas.width = width;
        canvas.height = height;
        
        // 在Canvas上绘制图片
        ctx.drawImage(img, 0, 0, width, height);
        
        // 将Canvas内容转换为Blob对象
        canvas.toBlob(
          (blob) => {
            if (!blob) {
              reject(new Error('图片转换失败'));
              return;
            }
            
            // 创建新的File对象
            const compressedFile = new File(
              [blob], 
              file.name, 
              { type: blob.type, lastModified: Date.now() }
            );
            
            resolve(compressedFile);
          },
          file.type,  // 使用原始图片类型
          quality     // 压缩质量
        );
      };
      
      // 监听图片加载错误事件
      img.onerror = () => reject(new Error('图片加载失败'));
      
      // 读取图片数据
      const reader = new FileReader();
      reader.onload = () => {
        img.src = reader.result;
      };
      reader.onerror = () => reject(new Error('文件读取失败'));
      
      // 开始读取文件
      reader.readAsDataURL(file);
    });
  }