在将其发送到 Cloudinary 之前进行 Base64 图像压缩

Posted

技术标签:

【中文标题】在将其发送到 Cloudinary 之前进行 Base64 图像压缩【英文标题】:Base64 image compression before sending it to Cloudinary 【发布时间】:2017-05-17 22:07:06 【问题描述】:

我正在制作一个支持图像上传和用户查看的网络应用程序。我使用 angularjs 作为框架,但是在我发现在单页应用程序框架(angular)中将图像发送到后端非常棘手之后,我选择将图像编译为 base64 并将其发送到后端。

一旦后端抓取到base64图像,它会再次将它发送到Cloudinary,数据库将保存来自cloudinary的响应,这是存储图像属性和url的JSON文件。

到目前为止效果很好,但现在我想在上述任何过程之间再添加一个过程,图像压缩。我对这种方法很陌生。所以我想知道是否有人处理过这个问题并给我一些建议或建议。

感谢您的宝贵时间。

【问题讨论】:

当您使用 Base64 时,您实际上是在增加文件大小。常规 HTTP 压缩对您来说还不够吗?并且......上传带有角度的文件并不是那么“棘手”。看到这个答案:***.com/questions/18571001/… 谢谢。我还研究了那个包和方法。但是,我正在处理的表单不仅仅是具有多个输入的表单。但是非常大,并且有许多文件上传输入。似乎在使用此类包时我必须将文本数据和文件数据分开,这最终使我难以扩展应用程序和数据结构。这就是为什么我决定使用 base64,即使它比裸数据还要大。 【参考方案1】:

这是我想出来的。希望这会帮助一些在同一问题上苦苦挣扎的人。

为了将图像编译为 base64,我使用了angular-base64-upload。此外,这个包让我们有机会在将 base64 字符串添加到 ng-model 变量之前处理文件。

因此,我使用 Jimp 与 angular-base-64-upload 混合。它工作得很好。 3.5Mb 大小的图像下降到 110kb 左右,质量降低到 50%,宽度降低到 1280px。

【讨论】:

以上是关于在将其发送到 Cloudinary 之前进行 Base64 图像压缩的主要内容,如果未能解决你的问题,请参考以下文章

Android - 在将位图保存到 SDCARD 以获取结果之前压缩位图

在将 HTML 字符串发送到客户端之前格式化 HTML 字符串的 C# 工具[关闭]

在将查询发送到 GraphQL 之前对其进行操作

CKEditor Carrierwave Cloudinary

Express、Multer 和 Cloudinary 未返回完整的 Cloudinary 响应

Angular forEach 等到所有承诺都完成?