使用 Deno 构建不足 100 行的图像缩放 API

作者:API传播员 · 2025-10-19 · 阅读时间:4分钟
本教程详细介绍了如何使用Deno构建一个不足100行代码的简单图像缩放API,包括图像调整大小和裁剪功能的实现,以及如何将API部署到Deno Deploy。适合初学者学习和实践。

使用 Deno 构建一个不足 100 行代码的简单图像缩放 API

在本教程中,我们将使用 Deno 构建一个简单的图像缩放 API,整个项目代码不足 100 行。通过这个教程,你将学习如何快速创建一个支持图像调整大小和裁剪功能的 API,并将其部署到线上。


创建项目目录和初始化文件

首先,为项目创建一个新的目录。在该目录下,创建一个名为 main.ts 的 TypeScript 文件。接下来,打开终端,进入该目录并运行以下命令以启动脚本:

deno run --allow-net main.ts

运行后,打开浏览器访问 localhost:8000,你应该会看到页面显示“Hello World!”。


添加图像处理功能

接下来,我们将为项目添加图像处理功能。在 main.ts 文件中,首先从 imagemagick_deno 库中导入所需内容。然后,初始化 ImageMagick,为其二进制文件及 API 配置必要的环境。


参数解析函数 parseParams

我们需要创建一个名为 parseParams 的新函数,用于解析请求中的参数。该函数的主要功能包括:

  • 检查必要的参数:image(图像 URL)、height(高度)和 width(宽度)。

serve() 函数中,我们可以通过查询字符串获取这些参数,并调用 parseParams 进行解析。


获取远程图像

serve() 函数中,调用 parseParams 后,我们需要实现一个函数 getRemoteImage,用于从远程 URL 下载图像,并处理可能出现的错误。


修改图像大小

创建一个名为 modifyImage 的新函数,该函数接受两个参数:imageBuffer(图像数据缓冲区)和 params(解析后的参数对象)。在这个函数中,我们将使用 MagickGeometry 构造函数设置调整大小的参数。

为了支持自适应调整大小,如果参数中缺少 heightwidth,我们需要将 ignoreAspectRatio 设置为 false。最后,该函数返回一个 Promise,解析为调整大小后的图像数据(Uint8Array)。

serve() 函数中,调用 getRemoteImage 后,添加对 modifyImage 的调用,并返回一个包含修改后图像的 Response


添加裁剪功能

为了增强 API 的灵活性,我们可以为其添加裁剪功能。在某些情况下,裁剪图像可以避免因改变纵横比而导致的图像变形。

parseParams 函数中,添加对 mode 参数的支持,用于指定操作模式(resizecrop)。然后,在 modifyImage 函数中,根据 mode 参数决定是否调用 image.crop() 方法进行裁剪。


测试 API

现在,你可以运行以下命令启动 API:

deno run --allow-net main.ts

然后,通过以下 URL 测试 API:

http://localhost:8000/?image=https://deno.land/images/artwork/deno_city.jpeg&width=500&height=500

访问后,你应该会看到调整大小后的图像结果:

示例图像


部署到 Deno Deploy

完成 API 开发后,我们可以将其部署到 Deno Deploy。以下是部署步骤:

  1. 创建一个包含 main.ts 文件的 GitHub 仓库。
  2. 访问 Deno Deploy,并连接你的 GitHub 账户。
  3. 在 Deno Deploy 中创建一个新项目,选择刚刚创建的 GitHub 仓库。
  4. 配置为“GitHub 自动部署”,每次合并到 main 分支时都会自动部署。
  5. 设置入口点为 main.ts

部署完成后,你的 API 将在几分钟内上线。此时,你可以通过分配的 URL 访问你的图像缩放 API。


总结

通过本教程,我们成功使用 Deno 构建了一个简单的图像缩放 API,并实现了图像调整大小和裁剪功能。整个项目代码精简且高效,非常适合初学者学习和实践。最后,我们还将 API 部署到 Deno Deploy,使其可以在线访问。希望本教程对你有所帮助!

原文链接: https://deno.com/blog/build-image-resizing-api