广告
返回顶部
首页 > 资讯 > 精选 >element前端如何实现压缩图片功能
  • 824
分享到

element前端如何实现压缩图片功能

2023-07-05 07:07:29 824人浏览 独家记忆
摘要

这篇文章主要讲解了“element前端如何实现压缩图片功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“element前端如何实现压缩图片功能”吧!实现效果如下图所示,从 580kb -&g

这篇文章主要讲解了“element前端如何实现压缩图片功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“element前端如何实现压缩图片功能”吧!

实现效果

如下图所示,从 580kb ->  压缩后  150kb

element前端如何实现压缩图片功能

实现步骤

父级引入封装文件

//页面上<el-dialog      title="压缩图片"      :visible.sync="compressImgVisible"      width="700"      foot-hide    >      <uploadImg      />    </el-dialog> //js中data() {    return {      compressImgVisible: false,    }

首先实现上传功能,使用el-upload,

封装uploadImg.Vue

<template>  <div class="uploadImgBody">    <!--上传图片部分-->    <el-upload      class="upload-image"      ref="upload"      :action="action"      :headers="headers"      :multiple="multiple"      :data="data"      :name="name"      :show-file-list="showFileList"      :drag="drag"      :accept="accept"      :list-type="listType"      :auto-upload="autoUpload"      :disabled="is_disabled"       :before-upload="beforeUpload"    >      <!--弹框展示上传以后的图片-->      <img        class="fileImg"        v-if="mrImgUrl"        :src="mrImgUrl"      >      <div v-else>        <i class="el-icon-plus"></i>      </div>    </el-upload>  </div> </template> <script>//element的上传图片,压缩图片组件export default {  props:{        autoUpload:{ // 是否需要选取完自动上传功能      type: Boolean,      default: true    },    // 默认图片,父级传过来 Http开头的文件    mrImgUrl:{      type: String,      default: ''    },    action:{//上传的地址      type: String,      default: ''    },    headers: {//设置上传的请求头部      type:Object,      default: () => {        return {}      }    },    data: {//上传时额外带的参数      type:Object,      default: () => {        return {}      }    },    name:{//上传的文件字段名      type: String,      default: 'file'    },    cookieOK:{//支持发送 cookie 凭证信息      type: Boolean,      default: true    },        showFileList:{//是否显示已上传文件列表      type: Boolean,      default: false    },    drag:{//是否启用拖拽上传      type: Boolean,      default: false    },    accept:{//接受文件类型-图片上传类型-不同的格式之间以逗号隔开      type: String,      default: '.jpg,.jpeg,.png'    },    listType:{ // 文件列表的类型 - text/picture/picture-card      type: String,      default: 'picture-card'    },    fileList:{//已上传的文件列表,      type:Array,      default: () => {        return [          {            name: 'food.jpeg',            url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/fORMat/WEBp/quality/100'          }        ]      }    },    is_disabled:{//是否禁止,true是禁止,false不禁止      type: Boolean,      default: false    },    multiple:{//是否可以多选      type: Boolean,      default: true    },   },  watch: {},  data() {    return {     }  },  methods: {        beforeUpload(file) {      this.$emit('uploadFile',file);      return    }   }, }</script> <style lang='sCSS' scoped>.uploadImgBody{  height: auto;  .upload-image{    width:200px;    height: 200px;    .fileImg{      width:100%;      height: 100%;    }  }  .showImg{    width:100px;    height: 100px;  } } </style>

加入压缩功能

逻辑:

首先,把file文件转成  canvas图片,然后canvas压缩图片利用canvas.toDataURL()将canvas绘制的图像转成图片从而达到压缩图片尺寸的效果

htmlCanvasElement.toDataURL()

element前端如何实现压缩图片功能

 具体方法:其中 dataUrl 就是拿到的canvas图片的base64地址

     compressImg(file) {      const reader = new FileReader();      // readAsDataURL 方法会读取指定的 Blob 或 File 对象。读取操作完成的时候,readyState 会变成已完成DONE,并触发 loadend (en-US) 事件,      // 同时 result 属性将包含一个data:URL格式的字符串(base64编码)以表示所读取文件的内容。      reader.readAsDataURL(file);      reader.onload = () => {        const img = new Image();        img.src = reader.result;        img.onload = () => {          // 图片的宽高          const w = img.width;          const h = img.height;          const canvas = document.createElement("canvas");          // canvas对图片进行裁剪,这里设置为图片的原始尺寸          canvas.width = w;          canvas.height = h;          const ctx = canvas.getContext("2d");          // canvas中,png转jpg会变黑底,所以先给canvas铺一张白底          ctx.fillStyle = "#fff";          // fillRect()方法绘制一个填充了内容的矩形,这个矩形的开始点(左上点)在          // (x, y) ,它的宽度和高度分别由width 和 height 确定,填充样式由当前的fillStyle 决定。          ctx.fillRect(0, 0, canvas.width, canvas.height);          // 绘制图像          ctx.drawImage(img, 0, 0, w, h);           // canvas转图片达到图片压缩效果          // 返回一个包含图片展示的 data URI base64 在指定图片格式为 image/jpeg 或 image/webp的情况下,          // 可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。          const dataUrl = canvas.toDataURL("image/jpeg", 0.8);          this.dialogImageUrl = dataUrl         };      };    },

拿到的base64地址,不能直接给后端,要转格式,这里提供两种,一是file文件,跟压缩前的格式一样,还有一种是blob方法

// canvas生成的格式为base64,需要进行转化, base64->file    dataURLtoFile(dataurl,fileName) {      let arr = dataurl.split(','),      mime = arr[0].match(/:(.*?);/)[1],       bstr = atob(arr[1]),      n = bstr.length,      u8arr = new Uint8Array(n);      while (n--) {        u8arr[n] = bstr.charCodeAt(n);      }      return new File([u8arr], fileName, {type:mime})    },    // canvas生成的格式为base64,需要进行转化, base64->blob    dataURLtoBlob(dataurl) {      const arr = dataurl.split(","),        mime = arr[0].match(/:(.*?);/)[1],        bstr = atob(arr[1]);      let n = bstr.length;      const u8arr = new Uint8Array(n);      while (n--) {        u8arr[n] = bstr.charCodeAt(n);      }      return new Blob([u8arr], { type: mime });    },

实现源码(上传+压缩):

uploadImg.vue

<template>  <div class="uploadImgBody">    <!--上传图片部分-->    <el-upload      class="upload-image"      ref="upload"      :action="action"      :headers="headers"      :multiple="multiple"      :data="data"      :name="name"      :show-file-list="showFileList"      :drag="drag"      :accept="accept"      :list-type="listType"      :auto-upload="autoUpload"      :disabled="is_disabled"       :before-upload="beforeUpload"    >      <!--弹框展示上传以后的图片-->      <img        class="fileImg"        v-if="mrImgUrl"        :src="mrImgUrl"      >      <div v-else>        <i class="el-icon-plus"></i>      </div>    </el-upload>    源图片大小:<span v-if="sourceFile.size">{{ sourceFile.size/1024 }}</span> kb    <el-button @click="compressImgFun" >点我压缩</el-button>    压缩图片大小:<span v-if="compressFile.size">{{compressFile.size/1024 }}</span> kb    <img      v-if="dialogImageUrl"      class="showImg"      :src="dialogImageUrl"    >  </div> </template> <script>//element的上传图片,压缩图片组件export default {  props:{        autoUpload:{ // 是否需要选取完自动上传功能      type: Boolean,      default: true    },    // 默认图片,父级传过来 http开头的文件    mrImgUrl:{      type: String,      default: ''    },    action:{//上传的地址      type: String,      default: ''    },    headers: {//设置上传的请求头部      type:Object,      default: () => {        return {}      }    },    data: {//上传时额外带的参数      type:Object,      default: () => {        return {}      }    },    name:{//上传的文件字段名      type: String,      default: 'file'    },    cookieOK:{//支持发送 cookie 凭证信息      type: Boolean,      default: true    },        showFileList:{//是否显示已上传文件列表      type: Boolean,      default: false    },    drag:{//是否启用拖拽上传      type: Boolean,      default: false    },    accept:{//接受文件类型-图片上传类型-不同的格式之间以逗号隔开      type: String,      default: '.jpg,.jpeg,.png'    },    listType:{ // 文件列表的类型 - text/picture/picture-card      type: String,      default: 'picture-card'    },    fileList:{//已上传的文件列表,      type:Array,      default: () => {        return [          {            name: 'food.jpeg',            url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'          }        ]      }    },    is_disabled:{//是否禁止,true是禁止,false不禁止      type: Boolean,      default: false    },    multiple:{//是否可以多选      type: Boolean,      default: true    },   },  watch: {},  data() {    return {      dialogImageUrl:'',//源图片      sourceFile:{}, //上传后的图片      compressFile:{} //压缩后的图片     }  },  methods: {        beforeUpload(file) {      this.sourceFile = file      this.$emit('uploadFile',file);      return    },    compressImgFun(){      this.compressImg(this.sourceFile)      console.log('压缩前的图片文件:file');      console.log(this.sourceFile);    },        compressImg(file) {      const reader = new FileReader();      // readAsDataURL 方法会读取指定的 Blob 或 File 对象。读取操作完成的时候,readyState 会变成已完成DONE,并触发 loadend (en-US) 事件,      // 同时 result 属性将包含一个data:URL格式的字符串(base64编码)以表示所读取文件的内容。      reader.readAsDataURL(file);      reader.onload = () => {        const img = new Image();        img.src = reader.result;        img.onload = () => {          // 图片的宽高          const w = img.width;          const h = img.height;          const canvas = document.createElement("canvas");          // canvas对图片进行裁剪,这里设置为图片的原始尺寸          canvas.width = w;          canvas.height = h;          const ctx = canvas.getContext("2d");          // canvas中,png转jpg会变黑底,所以先给canvas铺一张白底          ctx.fillStyle = "#fff";          // fillRect()方法绘制一个填充了内容的矩形,这个矩形的开始点(左上点)在          // (x, y) ,它的宽度和高度分别由width 和 height 确定,填充样式由当前的fillStyle 决定。          ctx.fillRect(0, 0, canvas.width, canvas.height);          // 绘制图像          ctx.drawImage(img, 0, 0, w, h);           // canvas转图片达到图片压缩效果          // 返回一个包含图片展示的 data URI base64 在指定图片格式为 image/jpeg 或 image/webp的情况下,          // 可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。          const dataUrl = canvas.toDataURL("image/jpeg", 0.8);          this.dialogImageUrl = dataUrl           // base64格式文件转成Blob文件格式          let blobFile = this.dataURLtoBlob(dataUrl);          console.log("压缩后的图片:Blob文件----------");          console.log(blobFile);          // base64格式文件转成file文件格式          let fileName = this.sourceFile.name          let fileImg = this.dataURLtoFile(dataUrl,fileName);          console.log("压缩后的图片:file文件----------");          console.log(fileImg);          this.compressFile = fileImg         };      };    },    // canvas生成的格式为base64,需要进行转化, base64->file    dataURLtoFile(dataurl,fileName) {      let arr = dataurl.split(','),      mime = arr[0].match(/:(.*?);/)[1],       bstr = atob(arr[1]),      n = bstr.length,      u8arr = new Uint8Array(n);      while (n--) {        u8arr[n] = bstr.charCodeAt(n);      }      return new File([u8arr], fileName, {type:mime})    },    // canvas生成的格式为base64,需要进行转化, base64->blob    dataURLtoBlob(dataurl) {      const arr = dataurl.split(","),        mime = arr[0].match(/:(.*?);/)[1],        bstr = atob(arr[1]);      let n = bstr.length;      const u8arr = new Uint8Array(n);      while (n--) {        u8arr[n] = bstr.charCodeAt(n);      }      return new Blob([u8arr], { type: mime });    },    }, }</script> <style lang='scss' scoped>.uploadImgBody{  height: auto;  .upload-image{    width:200px;    height: 200px;    .fileImg{      width:100%;      height: 100%;    }  }  .showImg{    width:100px;    height: 100px;  } } </style>

感谢各位的阅读,以上就是“element前端如何实现压缩图片功能”的内容了,经过本文的学习后,相信大家对element前端如何实现压缩图片功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: element前端如何实现压缩图片功能

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

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

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

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

下载Word文档
猜你喜欢
  • element前端如何实现压缩图片功能
    这篇文章主要讲解了“element前端如何实现压缩图片功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“element前端如何实现压缩图片功能”吧!实现效果如下图所示,从 580kb -&g...
    99+
    2023-07-05
  • element前端实现压缩图片的功能
    目录前言实现效果实现步骤前言 随着现在手机像素,拍照功能越来越好,随之而来的是本地图片越来越大,那么如何更好的将本地图片上传到后端接口呢?这是后台管理系统常见的场景和头疼的问题,这里...
    99+
    2023-03-01
    element 压缩图片 vue 压缩图片
  • php实现图片压缩功能
    简述: 使用php的GD库可以将图片按固定宽高或者等比例压缩,主要利用的函数是: imagecopyresampled:将一张图片中的一块区域复制到另一张图片上 等比例压缩   public function compressImg($sr...
    99+
    2023-08-31
    php 开发语言
  • js如何实现移动端图片压缩上传功能
    这篇文章给大家分享的是有关js如何实现移动端图片压缩上传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。移动端图片压缩上传功能如何实现?做移动端开发的时候,form里面的fil...
    99+
    2022-10-19
  • 如何利用canvas实现图片压缩功能
    小编给大家分享一下如何利用canvas实现图片压缩功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!项目中做身份证识别时,需要传送图片的 base64 格式编码,...
    99+
    2023-06-09
  • springboot实现图片大小压缩功能
    本文实例为大家分享了springboot实现图片大小压缩的具体代码,供大家参考,具体内容如下 application.properties配置文件 #后端接收图片大小 spring....
    99+
    2022-11-13
  • H5如何实现图片压缩与上传功能
    这篇文章主要为大家展示了“H5如何实现图片压缩与上传功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“H5如何实现图片压缩与上传功能”这篇文章吧。canvas压...
    99+
    2022-10-19
  • JavaScript中怎么实现图片压缩功能
    JavaScript中怎么实现图片压缩功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。压缩思路涉及到 JS 的图片压缩,我的想法是需要用...
    99+
    2022-10-19
  • Android中怎么实现图片压缩功能
    Android中怎么实现图片压缩功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、图片质量压缩    public s...
    99+
    2023-05-31
    android
  • java实现上传图片并压缩图片大小功能
    Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好。从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式...
    99+
    2023-05-31
    java 上传图片 压缩图片
  • 如何使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
    这篇文章主要介绍如何使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!第一步:下载localRes...
    99+
    2022-10-19
  • springboot怎么实现图片大小压缩功能
    本篇内容主要讲解“springboot怎么实现图片大小压缩功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot怎么实现图片大小压缩功能”吧!application.proper...
    99+
    2023-06-30
  • Canvas如何实现图片压缩
    这篇文章主要介绍Canvas如何实现图片压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Canvas图片压缩流程接下来我将以具体实例为大家讲解Canvas图片压缩的具体流程。一、本...
    99+
    2022-10-19
  • web开发总移动端如何实现图片上传旋转、压缩功能
    小编给大家分享一下web开发总移动端如何实现图片上传旋转、压缩功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在手机上通过网页...
    99+
    2022-10-19
  • Vue.js 2.0如何实现移动端拍照压缩图片上传预览功能
    小编给大家分享一下Vue.js 2.0如何实现移动端拍照压缩图片上传预览功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在学习...
    99+
    2022-10-19
  • Vue.js 2.0如何实现移动端拍照压缩图片预览及上传功能
    这篇文章主要介绍Vue.js 2.0如何实现移动端拍照压缩图片预览及上传功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先我来讲我实现这个拍照预览压缩上传的思路,准确的说应该是拍...
    99+
    2022-10-19
  • win10如何取消图片自动压缩功能
    这篇文章主要介绍了win10如何取消图片自动压缩功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。按win+r打开运行窗口,输入regedit,回车即可。依次打开HKEY_C...
    99+
    2023-06-28
  • Android中怎么实现图片压缩与上传功能
    Android中怎么实现图片压缩与上传功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先需要对图片进行压缩,这方面可以使用第三方的库,我在实际的开发中使用的...
    99+
    2023-05-30
    android
  • spring mvc+localResizeIMG实现HTML5端图片压缩上传
    最近在做一个移动端HTML5的应用,使用到了上传功能,起初使用传统的上传方式上传手机拍照的照片,由于手机拍照出来的照片一般都是好几MB,所以上传速度是非常慢的。在网上找了很久找到了localResizeIMG压缩框架,感觉非常的实用,所以在...
    99+
    2023-05-31
    html5 localresizeimg 上传
  • HTML5中怎么实现一个图片压缩上传功能
    这篇文章给大家介绍HTML5中怎么实现一个图片压缩上传功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、创建一个图片和一个canvasXML/HTML Code复制内容到剪贴板va...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作