热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优化图片大小:在Vue中实现上传前的图像压缩处理

在Vue项目中,为了提高页面加载速度和优化用户体验,实现图片上传前的压缩处理至关重要。本文介绍了如何通过集成第三方库和自定义组件,有效减小图片文件大小,确保在不影响图像质量的前提下,提升应用性能。

图片压缩


changeFile() {var that = this;var Files = document.getElementById('file').files[0];this.uploadSectionFile(Files);
},
uploadSectionFile(f) { // 附件上传let that &#61; this;let Orientation;let ndata;let url;if (f.size <&#61; 1 * 1024 * 1024) {//判断图片是否大于1M,是就直接上传ndata &#61; f;that.uploadimg &#61; ndata;that.show &#61; true;} else {//反之压缩图片let reader &#61; new FileReader();// 将图片2将转成 base64 格式reader.readAsDataURL(f);// 读取成功后的回调reader.onloadend &#61; function () {let result &#61; this.result;let img &#61; new Image();img.src &#61; result;img.onload &#61; function () {ndata &#61; that.compress(img, Orientation);that.uploadimg &#61; ndata;that.show &#61; true;that.imgurl &#61; ndata.substring(ndata.indexOf(&#39;base64,&#39;) &#43; 7, ndata.length);}}}
},
compress(img, Orientation) {let canvas &#61; document.createElement("canvas");let ctx &#61; canvas.getContext(&#39;2d&#39;);//瓦片canvaslet tCanvas &#61; document.createElement("canvas");let tctx &#61; tCanvas.getContext("2d");let initSize &#61; img.src.length;let width &#61; img.width;let height &#61; img.height;//如果图片大于四百万像素&#xff0c;计算压缩比并将大小压至400万以下let ratio;if ((ratio &#61; width * height / 4000000) > 1) {ratio &#61; Math.sqrt(ratio);width /&#61; ratio;height /&#61; ratio;} else {ratio &#61; 1;}canvas.width &#61; width;canvas.height &#61; height;//铺底色ctx.fillStyle &#61; "#fff";ctx.fillRect(0, 0, canvas.width, canvas.height);//如果图片像素大于100万则使用瓦片绘制let count;if ((count &#61; width * height / 1000000) > 1) {count &#61; ~~(Math.sqrt(count) &#43; 1); //计算要分成多少块瓦片// 计算每块瓦片的宽和高let nw &#61; ~~(width / count);let nh &#61; ~~(height / count);tCanvas.width &#61; nw;tCanvas.height &#61; nh;for (let i &#61; 0; i }


推荐阅读
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
author-avatar
火立者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有