使用 MongoDB 进行图像处理

阅读时长 10 分钟读完

在现代 Web 应用中,图像处理是常见的需求之一。为了更好地满足这些需求,不仅需要使用传统的图像处理库,还需要结合文档数据库来存储和管理图像。在本文中,我们将介绍如何使用 MongoDB 进行图像处理,创建适合于 Web 应用的 image store,基于该存储系统实现一些简单的图像处理任务。

MongoDB 的基础知识

在开始之前,我们需要先对 MongoDB 进行一些介绍。MongoDB 是一种 NoSQL 数据库,其最大的优点在于可以快速轻松地存储和处理大量的数据(如图像)。MongoDB 使用文档模型来组织数据,文档是一种比传统的表格更加灵活的数据结构,可以将各种类型的数据存储在同一个文档中。MongoDB 还支持高可用性、可扩展性和自动分片等高级特性,并提供了强大的查询语言和索引支持。

创建 image store

在本文中,我们将使用 Node.js 和 MongoDB 创建一个简单的 image store。首先,需要安装 Node.js 和 MongoDB。在安装完成后,创建一个新的 Node.js 项目,并安装以下依赖项:

接下来,创建一个 app.js 文件,并添加以下代码:

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

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

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

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

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

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

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

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

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

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

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

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

在以上代码中,我们实现了一个简单的 image store,使用 Multer 处理图像上传和 Sharp 处理图像缩放和转换。我们还定义了两个路由:/upload/image/:id。上传图像时,我们将原始文件名、文件类型和文件数据存储在 MongoDB 集合中。我们还支持查看图像,如 /image/:id 路由所示。

图像处理

现在,我们已经创建了一个图像存储,可以开始对这些图像进行处理了。在本文中,我们将演示如何使用 Sharp 对图像进行缩放、裁剪和旋转。

缩放图像

首先,让我们来看看如何缩放图像。如上所述,我们已经在上传图像时使用 Sharp 对图像进行缩放。在以下示例中,我们使用 Sharp 对图像进行更高级的缩放,使用 sharp.extractsharp.resize 进行将图像放置到画布上,并按比例缩放图像。

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

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

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

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

在此示例中,我们获取了原始图像的元数据,并根据元数据计算图像的缩放比例。然后,我们使用 sharp.extractsharp.resize 方法将图像放置到一个宽度为 640、高度为 480 的画布上,并按比例缩放图像。最后,将缩放后图像的数据保存到 MongoDB。

裁剪图像

接下来,让我们来看看如何裁剪图像。在下面的示例中,我们使用 Sharp 对图像进行裁剪,并保存裁剪后的缩略图。

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

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

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

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

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

在此示例中,我们使用 sharp.resize 方法并设置 fit 选项为 cover。这使得裁剪宽度和高度的图像即使在缩放过程中也能保留其完整性。我们还将缩略图的数据插入到 MongoDB 中。

旋转图像

最后,让我们来看看如何旋转图像。在下面的示例中,我们使用 Sharp 旋转图像。

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

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

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

在此示例中,我们使用 sharp.rotate 方法并将旋转角度设置为 90,这会将图像旋转 90 度。最后,我们将旋转后的图像数据保存到 MongoDB 中。

总结

在本文中,我们介绍了如何使用 MongoDB 进行图像处理,创建了一个简单的 image store,并演示了使用 Sharp 对图像进行缩放、裁剪和旋转。这使得我们可以基于 MongoDB 创建更加灵活的 Web 应用程序,并充分利用 MongoDB 的优势。希望这篇文章对你会有帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e36027f6b2d6eab3ed4db8

纠错
反馈