需求分析
业务要求,需要一个图片上传控件,需满足
- 多图上传
- 点击预览
- 图片前端压缩
- 支持初始化数据
相关功能及资源分析
基本功能
先到https://www.npmjs.com/search"color: #ff0000">开发
需求和实现思路基本确定,开始进入编码,先搭建可运行可测试的环境
第一步,创建相关目录
|- components
|- ImageUpload
|- ImageUpload.vue
|- index.js
第二步,安装依赖
$ npm i image-compressor.js -S
$ npm i vue-upload-component -S
第三步,编写核心主体代码
// index.js
import ImageUpload from './ImageUpload'
export default ImageUpload
// ImageUpload.vue
<template>
<div class="m-image-upload">
<!--
这里分为两段遍历,理由是:在编辑情况下要默认为组件添加默认数据,虽然说组件提供了 `add` 方法,
但在编辑状态下,需要把 url 形式的图片转换成 File 之后才可以添加进去,略微麻烦。
所以分两次遍历,一次遍历表单对象里的图片(直接用img标签展示,新上传的图片可以通过 blob 来赋值 src),第二次遍历组件里的 files
-->
<div
class="file-item"
v-for="(file, index) in value">
<img
:src="/UploadFiles/2021-04-02/file.thumb || file.url">
图片压缩也可以自己来实现,主要是理清各种文件格式的转换
compress(imgFile) {
let _this = this
return new Promise((resolve, reject) => {
let reader = new FileReader()
reader.onload = e => {
let img = new Image()
img.src = e.target.result
img.onload = () => {
let canvas = document.createElement('canvas')
let ctx = canvas.getContext('2d')
canvas.width = img.width
canvas.height = img.height
// 铺底色
ctx.fillStyle = '#fff'
ctx.fillRect(0, 0, canvas.width, canvas.height)
ctx.drawImage(img, 0, 0, img.width, img.height)
// 进行压缩
let ndata = canvas.toDataURL('image/jpeg', 0.3)
resolve(_this.dataURLtoFile(ndata, imgFile.name))
}
}
reader.onerror = e => reject(e)
reader.readAsDataURL(imgFile)
})
}
// base64 转 Blob
dataURLtoBlob(dataurl) {
let arr = dataurl.split(','), mime = arr[0].match(/:(.*"color: #ff0000">最终效果
参考资料
vue-upload-component 文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
内蒙古资源网 Copyright www.nmgbbs.com
暂无“基于vue-upload-component封装一个图片上传组件的示例”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。

