欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > vue Element-ui对图片上传和选用时的比例控制

vue Element-ui对图片上传和选用时的比例控制

2025/5/20 7:16:08 来源:https://blog.csdn.net/weixin_71169215/article/details/148064028  浏览:    关键词:vue Element-ui对图片上传和选用时的比例控制

vue Element-ui对图片上传和选用时的比例控制

在后台上传图片和选用已经上传的图片时,往往会因为图片的比例控制不到位导致在客户端渲染时效果差强人意,虽然可以在操作时选择合适的比例上传,但必要的控制还是能完成渲染时良好的体验,今天就分享一个vue+Element-ui上传图片和选用图片场景时,对图片比例控制的方法。

知识点

关键的判断其实就是利用了js 的new image()对象来完成图片比例的控制的。

这里介绍一下关于new image()用法。
Image 对象是 JS 中的内置对象,它代表嵌入的图像。当我们创建一个 Image 对象时,就相当于给浏览器缓存了一张图片,Image 对象也常用来做预加载图片(也就是将图片预先加载到浏览器中,当浏览图片的时候就能享受到极快的加载速度)。在HTML页面中, 标签每出现一次,也就创建了一个 Image 对象。

var img=new Image();
img.src="img.png";
img.οnlοad=function(){console.log(img.width,img.height);
};

在创建 Image 对象后,如果没有给它的 width 和 height 属性赋值,那它的 width 和 height 的默认值都为0,定义Image对象的src=”xxx.jpg”; 这样做就相当于给浏览器缓存了一张图片,在img的onload事件中,也就是被浏览器解析完成以后,可以获取到该图片的信息。然后,就可以根据宽高信息来做一些判断,以下是实例代码。

上传前控制比例

<el-uploadclass="upload-demo mr10 mb15":action="fileUrl":before-upload="beforeUpload":on-success="handleSuccess":headers="myHeaders":show-file-list="false"multiple><el-button size="small" type="primary">点击上传</el-button>
</el-upload>
<script>
export default{data() {return {myHeaders: { 'X-Token': getToken() },}},computed: {fileUrl() {return SettingMer.https + `/upload/image/${this.tableData.attachment_category_id}/file`;},},methods:{beforeUpload(file){return new Promise((resolve, reject) => {let reader = new FileReader()reader.readAsDataURL(file)reader.onload = () => {let img = new Image()img.src = reader.resultimg.onload = () => {if (img.naturalWidth / img.naturalHeight !== 1) {this.$message.error(`请上传宽高比为1:1的图片!`)return reject(false)} else {return resolve(true)}}}})},// 上传成功handleSuccess(response) {if (response.status === 200) {this.$message.success('上传成功');this.getFileList('');} else {this.$message.error(response.message);}},}
}
</script>

通过封装的组件选用时

getImageSize(url) {//用promise捕捉比例是否合适,不合适返回一个提醒return new Promise((resolve, reject) => {const img = new Image();img.src = url;img.onload = () => {//根据传入的图片url获取宽高比例if (img.width / img.height !== 1) {reject('请选择宽高比为1:1的图片!');} else {resolve(true);}};});
},
modalPicTap(tit, num, i){const _this = this;//封装的图片选择器选择完图片点击确定时的回调this.$modalUpload(function (img){if (tit === '2' && !num){//选用多张时img.forEach((item) => {_this.getImageSize(item).then((res) => {_this.formValidate.slider_image.push(item);}).catch((err) => {this.$message.error(err);});});}if (tit === '1' && num === 'dan') {_this.getImageSize(img[0]).then((res) => {_this.image = img[0];}).catch((err) => {this.$message.error(err);});}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词