Vue.js 2.0 移动端拍照压缩图片上传预览功能

在移动端开发中,上传图片是非常常见的功能。然而,由于移动设备摄像头拍摄出来的图片分辨率通常比较高,因此需要对图片进行压缩以减小文件大小,避免上传过程中出现卡顿等问题。本文将介绍如何使用 Vue.js 2.0 实现移动端拍照压缩图片上传预览功能。

准备工作

在开始编写代码之前,需要先安装依赖。具体而言,需要安装以下两个库:

可以通过 npm 安装这两个库:

--- ------- ------- ------------ ------

实现步骤

1. 绑定 input[type=file]

首先,需要在页面中创建一个 input[type=file] 元素,并将其绑定到 Vue 实例中的 data 中:

----------
  -----
    ------ ----------- ---------------- --------------- ---------------------------
  ------
-----------

--------
------ ------- -
  ----- ----------------
  ------ -
    ------ -
      ----- ----
    -
  --
  -------- -
    ------------------ -
      --------- - -----------------------------
    -
  -
-
---------

2. 读取图片元数据

接下来,需要使用 exif-js 库读取图片的元数据。在 handleFileChange 方法中添加以下代码:

------ ---- ---- ---------

------------------ -
  --------- - -----------------------------

  ----- ------ - --- ------------
  ------------- - ------- -- -
    ----- ----- - --- -------
    --------- - -------------------
    ------------ - -- -- -
      ------------------- ---------- -
        ------------------------------
      --
    -
  -
  -------------------------------
-

上述代码创建了一个 FileReader 实例,用于读取文件内容并转换为 data URL 格式。然后创建一个 Image 实例,将 data URL 赋值给其 src 属性,并在其 onload 回调函数中使用 exif-js 库读取图片元数据。

3. 压缩图片

接下来,需要使用 compressorjs 库对图片进行压缩。在 handleFileChange 方法中添加以下代码:

------ ---- ---- ---------
------ ---------- ---- --------------

------------------ -
  --------- - -----------------------------

  ----- ------ - --- ------------
  ------------- - ------- -- -
    ----- ----- - --- -------
    --------- - -------------------
    ------------ - -- -- -
      ------------------- ---------- -
        --- ----------------- -
          -------- ----
          --------- ----
          -------- -------- -- -
            -------------------
          --
          ------ ----- -- -
            --------------------------
          --
        --
      --
    -
  -
  -------------------------------
-

上述代码中,使用 Compressor 构造函数创建一个压缩器实例。其中 quality 属性指定了压缩图片的质量,maxWidth 属性指定了压缩后图片的最大宽度。success 回调函数将在压缩成功后被调用,其参数 result 即为压缩后的图片数据。error 回调函数将在压缩失败时被调用,其参数 err 包含了错误信息。

4. 预览压缩后的图片

最后,需要将压缩后的图片显示在页面上。可以通过添加一个 img 元素来预览图片:

----------
  -----
    ------ ------

- ---------------------------------------------------------- --------
-------------------------------------------------------------------------------------