广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue使用canvas实现图片压缩上传
  • 647
分享到

Vue使用canvas实现图片压缩上传

2024-04-02 19:04:59 647人浏览 八月长安
摘要

本文实例为大家分享了Vue使用canvas实现图片压缩上传的具体代码,供大家参考,具体内容如下 场景:如用户头像等 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大

本文实例为大家分享了Vue使用canvas实现图片压缩上传的具体代码,供大家参考,具体内容如下

场景:如用户头像等

对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验。

两方面:

1、由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险。
2、很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的(但是我用单反拍了个头像,照片超过2M很正常,要对图片进行处理才能上传)。如果可以在前端进行压缩,则理论上对图片尺寸的限制是没有必要的。

示例:

主要技术:使用canvasdrawImage()方法。(附:canvas.toDataURL()或者canvas.toBlob())


ctx.drawImage(image, dx, dy);
ctx.drawImage(image, dx, dy, dWidth, dHeight);
ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

示例:


// html
<input id="file" type="file">

// js
var eleFile = document.querySelector('#file');

// 压缩图片需要的一些元素和对象
var reader = new FileReader(), img = new Image();

// 选择的文件对象
var file = null;

// 缩放图片需要的canvas
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');

// base64地址图片加载完毕后
img.onload = function () {
    // 图片原始尺寸
    var originWidth = this.width;
    var originHeight = this.height;
    // 最大尺寸限制
    var maxWidth = 400, maxHeight = 400;
    // 目标尺寸
    var targetWidth = originWidth, targetHeight = originHeight;
    // 图片尺寸超过400x400的限制
    if (originWidth > maxWidth || originHeight > maxHeight) {
        if (originWidth / originHeight > maxWidth / maxHeight) {
            // 更宽,按照宽度限定尺寸
            targetWidth = maxWidth;
            targetHeight = Math.round(maxWidth * (originHeight / originWidth));
        } else {
            targetHeight = maxHeight;
            targetWidth = Math.round(maxHeight * (originWidth / originHeight));
        }
    }
        
    // canvas对图片进行缩放
    canvas.width = targetWidth;
    canvas.height = targetHeight;
    // 清除画布
    context.clearRect(0, 0, targetWidth, targetHeight);
    // 图片压缩
    context.drawImage(img, 0, 0, targetWidth, targetHeight);
    // canvas转为blob并上传
    canvas.toBlob(function (blob) {
        // 图片ajax上传
        var xhr = new XMLHttpRequest();
        // 文件上传成功
        xhr.onreadystatechange = function() {
            if (xhr.status == 200) {
                // xhr.responseText就是返回的数据
            }
        };
        // 开始上传
        xhr.open("POST", 'upload.PHP', true);
        xhr.send(blob);    
    }, file.type || 'image/png');
};

// 文件base64化,以便获知图片原始尺寸
reader.onload = function(e) {
    img.src = e.target.result;
};
eleFile.addEventListener('change', function (event) {
    file = event.target.files[0];
    // 选择的文件是图片
    if (file.type.indexOf("image") == 0) {
        reader.readAsDataURL(file);    
    }
});

注意:

移动端会出现图片变形,需要根据设备的dpr对canvas进行放大,再用CSS进行强制恢复


// 获取设备dpr
getPixelRatio: function(context) {
    let backingStore = context.backingStorePixelRatio ||
    context.WEBkitBackingStorePixelRatio ||
    context.mozBackingStorePixelRatio ||
    context.msBackingStorePixelRatio ||
    context.oBackingStorePixelRatio ||
    context.backingStorePixelRatio || 1;
    return (window.devicePixelRatio || 1) / backingStore;
}

// 大概这样
const ctx = this.canvas.getContext("2d");
const dpr = this.getPixelRatio(ctx);
this.$refs.postImg.crossOrigin = "Anonymous";
var oldWidth = this.canvas.width;
var oldHeight = this.canvas.height;
this.canvas.style.width = oldWidth + 'px'; 
this.canvas.style.height = oldHeight + 'px';
this.canvas.width = oldWidth * dpr;
this.canvas.height = oldHeight * dpr;
ctx.scale(dpr, dpr);

//进行正常的操作
ctx.drawImage(this.$refs.cropImg, 0, 0, 250, 400);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Vue使用canvas实现图片压缩上传

本文链接: https://www.lsjlt.com/news/133836.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue使用canvas实现图片压缩上传
    本文实例为大家分享了Vue使用canvas实现图片压缩上传的具体代码,供大家参考,具体内容如下 场景:如用户头像等 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大...
    99+
    2022-11-12
  • 使用canvas怎么对图片压缩上传
    使用canvas怎么对图片压缩上传?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先得有一个上传按钮。<input type="file"&...
    99+
    2023-06-09
  • 怎么使用vue实现微信端图片压缩上传
    这篇文章主要介绍“怎么使用vue实现微信端图片压缩上传”,在日常操作中,相信很多人在怎么使用vue实现微信端图片压缩上传问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用vue实现微信端图片压缩上传”的疑...
    99+
    2023-07-04
  • 图片上传及canvas压缩的示例分析
    小编给大家分享一下图片上传及canvas压缩的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们通常在做图片上传的时候都会遇上这样的情况,一是后端接口限制...
    99+
    2023-06-09
  • Canvas如何实现图片压缩
    这篇文章主要介绍Canvas如何实现图片压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Canvas图片压缩流程接下来我将以具体实例为大家讲解Canvas图片压缩的具体流程。一、本...
    99+
    2022-10-19
  • html5中canvas移动浏览器上如何实现图片压缩上传
    这篇文章主要介绍html5中canvas移动浏览器上如何实现图片压缩上传,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、<input type="file"...
    99+
    2022-10-19
  • 怎么用html5的canvas移动浏览器实现图片压缩上传
    这篇文章主要介绍“怎么用html5的canvas移动浏览器实现图片压缩上传”,在日常操作中,相信很多人在怎么用html5的canvas移动浏览器实现图片压缩上传问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2022-10-19
  • 怎么使用canvas压缩图片
    今天就跟大家聊聊有关怎么使用canvas压缩图片,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先要先获取到图片文件var eleFile = docu...
    99+
    2023-06-09
  • java实现上传图片并压缩图片大小功能
    Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式...
    99+
    2023-05-31
    java 上传图片 压缩图片
  • JS如何实现异步上传压缩图片
    小编给大家分享一下JS如何实现异步上传压缩图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先看调用页面:<!doctyp...
    99+
    2022-10-19
  • spring mvc+localResizeIMG实现HTML5端图片压缩上传
    最近在做一个移动端HTML5的应用,使用到了上传功能,起初使用传统的上传方式上传手机拍照的照片,由于手机拍照出来的照片一般都是好几MB,所以上传速度是非常慢的。在网上找了很久找到了localResizeIMG压缩框架,感觉非常的实用,所以在...
    99+
    2023-05-31
    html5 localresizeimg 上传
  • 如何使用vue+axios+lrz.js实现微信端图片压缩上传方法
    这篇文章主要介绍如何使用vue+axios+lrz.js实现微信端图片压缩上传方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!业务场景微信端项目是基于Vux + Axios构建的,...
    99+
    2022-10-19
  • 怎么用HTML5的canvas实现图片压缩
    本篇内容主要讲解“怎么用HTML5的canvas实现图片压缩”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用HTML5的canvas实现图片压缩”吧!代码如...
    99+
    2022-10-19
  • H5如何实现图片压缩与上传功能
    这篇文章主要为大家展示了“H5如何实现图片压缩与上传功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“H5如何实现图片压缩与上传功能”这篇文章吧。canvas压...
    99+
    2022-10-19
  • 如何利用canvas实现图片压缩功能
    小编给大家分享一下如何利用canvas实现图片压缩功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!项目中做身份证识别时,需要传送图片的 base64 格式编码,...
    99+
    2023-06-09
  • Android中怎么实现图片压缩与上传功能
    Android中怎么实现图片压缩与上传功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先需要对图片进行压缩,这方面可以使用第三方的库,我在实际的开发中使用的...
    99+
    2023-05-30
    android
  • 使用canvas怎么对图片进行压缩
    本篇文章为大家展示了使用canvas怎么对图片进行压缩,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前提的函数将file文件转化为base64function changeFileToBa...
    99+
    2023-06-09
  • 怎么在html5中使用canvas压缩图片
    这期内容当中小编将会给大家带来有关怎么在html5中使用canvas压缩图片,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。知识点:canvas 的 toDataURL('image/png'...
    99+
    2023-06-09
  • HTML5中怎么实现一个图片压缩上传功能
    这篇文章给大家介绍HTML5中怎么实现一个图片压缩上传功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、创建一个图片和一个canvasXML/HTML Code复制内容到剪贴板va...
    99+
    2022-10-19
  • js如何实现移动端图片压缩上传功能
    这篇文章给大家分享的是有关js如何实现移动端图片压缩上传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。移动端图片压缩上传功能如何实现?做移动端开发的时候,form里面的fil...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作