在 Nextjs 项目中通过裁剪和压缩优化图像上传

在 nextjs 项目中通过裁剪和压缩优化图像上传

作为一名前端开发人员,您很有可能曾经或正在从事涉及发布和显示图像的项目。如果你还没有,那么你很快就会的。因此,最近,当我们完成项目后,我们发现在显示用户提供的图像时遇到了麻烦。

这一切是如何解开的
最大的问题是如何处理尺寸,尤其是图像的高度与宽度。将图像设置为 object-fit: cover 似乎是填充图像容器的完美解决方案。但这又带来了其他问题。用户上传不同尺寸的图像;有些正在缩放,有些正在裁剪到同一个容器中。这种不一致的结果是 UI 不太吸引人,尤其是当用户的个人资料图片以不太明显的方式裁剪时。

解决方案
我决定寻找更好的解决方案。模仿社交媒体平台处理图像上传的方式,我认为让用户能够在上传之前裁剪和预览图像是件好事。经过一番研究,我终于找到了react-image-crop包。该软件包为用户提供了实时裁剪图像的功能,从而解决了部分问题。

在测试裁剪功能时,我注意到我正在处理的图像大小为 9.5MB。这时我突然想到:为什么不在客户端先压缩图片再上传呢?尽管后端也处理此问题,但提前优化图像的能力可以节省带宽并缩短上传时间。

这让我找到了另一个方便的包:browser-image-compression。将其与react-image-crop合并使我现在可以即时裁剪和压缩图像,并且效果很好。

权衡
该解决方案并非没有一些权衡。首先,您必须向项目中添加两个包;此外,由于压缩开销,小于 30KB 的图像实际上最终会变得更大。

我还使用Shadcn UI组件和react-dropzone包对其进行样式设计,以便让用户单击选择或拖放他们的图像。

点击下载“嗨格式压缩大师”;

使用 Next.js 图像组件
为了获得更好的性能,该解决方案可以与 Next.js Image 组件结合使用,该组件会自动优化图像。 Next.js 图像组件有助于提供适当大小的图像,从而缩短加载时间并提高整体性能。通过将裁剪和压缩与 Next.js 图像优化的强大功能相结合,您可以为用户提供更流畅、更高效的体验。

演示和源代码
您还可以在这里尝试现场演示

这里还有源代码 GitHub 存储库。觉得有用请star!如果您考虑在项目中使用此解决方案,请告诉我。

以上就是在 Nextjs 项目中通过裁剪和压缩优化图像上传的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2667947.html

(0)
上一篇 2025年3月7日 12:25:23
下一篇 2025年3月7日 12:25:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 从 shell 脚本迁移到“Bun 脚本”

    在 zcloud 从事专注于流程自动化和基础设施的项目时,我们经常遇到需要创建多个函数来执行验证和通用流程的情况。仅使用一种操作系统时一切正常,但当涉及多个系统时情况就会变得复杂。 在我们的例子中,大部分开发都在 linux 上进行,但我们…

    2025年3月7日
    100
  • Git 中合并的良好实践

    安全合并策略: 我正在学习如何在 git 中进行合并,有 2 个好的实践可以帮助您(如果您也是像我一样的新开发人员)最大程度地减少搞乱 git 历史记录的可能性。 从主分支测试合并:当您在主分支上工作并想要合并功能分支,但又想避免破坏主分支…

    2025年3月7日
    200
  • 即将推出大事

    我决定从头开始构建全栈 Web 开发人员课程,从 HID 一直到服务器和可扩展性。所有需要知道的,都将免费!以下是涵盖的内容: 互联网 互联网是如何运作的?什么是 HTTP?浏览器及其工作原理?DNS 及其工作原理?什么是域名?什么是托管?…

    2025年3月7日
    200
  • 又一周又一个特色

    本周我实现了对 @add00_3 制作的 DocBot 的 TOML 支持。第一次听说 TOML,有点惊讶它的存在(我们已经有了 YAML)。实现非常简单,因为代码是用 JavaScript 编写的,并且代码非常易于阅读。尽管我确实花了一分…

    2025年3月7日
    200
  • 如何使用 Git LFS 将大文件推送到 git 存储库

    所以我最近正在做一个项目,我必须使用高分辨率资产,因此它们的尺寸很大。我无法将文件推送到我的存储库。每当我尝试时,我都会收到以下错误: 远程:错误:文件 file.csv 为 182.47 mb​​;这超出了 github 的文件大小限制 …

    2025年3月7日
    200
  • JavaScript (JS) 路线图:快速掌握

    JavaScript (JS) 路线图: 基本原理: 变量、数据类型和运算符。循环和条件等控制结构。功能和范围。 DOM 操作: 使用 JavaScript 访问和修改 HTML 和 CSS。事件处理。 异步编程: 立即学习“Java免费学…

    2025年3月7日
    200
  • 新功能公关

    我有机会为同学的项目做出贡献。他开发了一个聊天完成程序,提供两种服务。第一个服务是 groq,第二个是 google 的 gemini。 解释一下,两者有显着差异。 Google 仅提供 Gemini 及其型号。另一方面,GROQ提供多种型…

    2025年3月7日 编程技术
    200
  • 我的第一篇文章:大家好!!!

    大家好! 作为我的第一篇文章,我想向大家介绍数学创造的艺术中的对称和美丽的世界。 首先我从 Pinterest 获得动力: 所以我问自己是否可以用数学公式来创建它,也许只使用圆规和尺子,或者只是组合正弦曲线,或者使用极坐标(如绘制次摆线等)…

    2025年3月7日
    200
  • React-Native重复类问题

    所以,我在我的react-native项目中添加了两个库: “react-native-chainway-c71”: “^0.1.15”, “uhf-reader-react-native”: “^0.0.18” 登录后复制 我在构建过程中…

    2025年3月7日
    200
  • 第一次使用 Git 远程工作

    介绍 本周,我加深了对 git 的理解,特别是使用 git 遥控器。作为先决条件,在处理远程时熟悉 git 合并至关重要。上周,我分享了我第一次使用 git merge 的经验并讨论了一些最佳实践。本周,我在开发新功能时应用了这些知识,不是…

    2025年3月7日
    200

发表回复

登录后才能评论