当前位置: 首页 > web >正文

选择图片转base64格式组件简单封装-Base64ImageInpu

选择图片转base64格式组件简单封装-Base64ImageInpu

vue+ts中使用。
在这里插入图片描述

<!-- Base64ImageInput-base64格式的图片上传输入框,这里并不会真的将图片上传,只是将图片转为base64格式显示在输入框中并且让其可以预览 -->
<template><div><a-input class="w-full"v-bind="$attrs"v-on="$listeners"@click="onClick"v-model="state.inputVal"readOnly><a-tooltip slot="suffix"v-if="base64Img"><div slot="title"><img :src="base64Img"class="w-14 h-14 my-4"v-if="base64Img!=''"></div><a-icon type="info-circle"style="color: rgba(0,0,0,.45)" /></a-tooltip></a-input><input type="file"hidden="hidden"ref="uploadButton":accept="acceptString"@change="uploadImage()"></div>
</template><script lang="ts">
import {Component, Emit, Model, Watch, Prop, Vue
} from 'vue-property-decorator';@Component({name: 'GBase64ImageInput',components: {},
})
export default class GBase64ImageInput extends Vue{@Model("change", {default: () => ([]),}) value!: any;/*** 文件类型(可以是字符串或者数组)* 示例:*   accept="image/png"*   accept="image/*"*   accept="image/png,image/jpeg"*   :accept="['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg']"*/@Prop({ type: [String, Array], default: () => ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'] })accept!: string | string[];get acceptString() {if (Array.isArray(this.accept)) {// 如果传的是 ['png','jpg'] 就转成 "image/png,image/jpeg"return this.accept.map((ext) => {if (ext.startsWith('image/')) return ext;return `image/${ext}`;}).join(',');}return this.accept;}base64Img = '';state = {inputVal: '',}onClick() {(this.$refs.uploadButton as any).click();}uploadImage() {const file = (this.$refs.uploadButton as any).files[0];const reader = new FileReader();let rawImg;reader.onloadend = () => {rawImg = reader.result;this.base64Img = rawImg;this.$set(this.state, 'inputVal', rawImg);this.emitChange();};reader.readAsDataURL(file);}@Watch('value')onValueChange(val: any) {this.base64Img = val;this.$set(this.state, 'inputVal', val);}@Emit("change")emitChange() {return this.base64Img;}mounted() {if (_.size(this.value) > 0) {this.base64Img = this.value;this.$set(this.state, 'inputVal', this.value);}}
}
</script><style lang="less" scoped>
</style>

使用:

<template slot="thumbnail"slot-scope="text, record"><GBase64ImageInput v-model="modalState.record.thumbnail" />
</template>
http://www.xdnf.cn/news/19680.html

相关文章:

  • 【Node.js教程】Express框架入门:从搭建到动态渲染商品列表
  • 埃文科技亮相2025中部数字经济产业发展大会暨数智创新博览会
  • 数据库事务隔离级别与 MVCC 机制详解
  • MiniCPM-V 4.5实战,实现图片、视频、多图的推理
  • 如何使用 JMeter 进行接口测试。
  • 设计模式-状态模式 Java
  • 盲盒小程序系统开发:构建盲盒社交新生态
  • api验签
  • Unity 串口通讯2 硬件SDK 开发[数据监听,按键监听]
  • 前端静态资源缓存与部署实践总结
  • 纯代码实现登录页面的DIY
  • 从零开始的python学习——函数(1)
  • uni-app支持单多选、搜索、查询、限制能否点击组件
  • SpringBoot @RefreshScope 注解的极致玩法
  • 从零开始的云计算生活——第五十五天,黑云压城,kubernetes模块之网络组件和CoreDNS组件
  • 一次诡异的报错排查:为什么时间戳变成了 ١٧٥٦٦٣٢٧٨
  • 云端虚拟手机:云手机的原理是什么?
  • SRE 系列(五)| MTTK/MTTF/MTTV:故障应急机制的三板斧
  • 低空经济的中国式进化:无人机与实时视频链路的未来五年
  • 后端笔试题-多线程JUC相关
  • 用滑动窗口与线性回归将音频信号转换为“Token”序列:一种简单的音频特征编码方法
  • 全栈智算系列直播回顾 | 智算中心对网络的需求与应对策略(下)
  • Linux开发必备:yum/vim/gcc/make全攻略
  • 大模型微调显存内存节约方法
  • 【ComfyUI】图像描述词润色总结
  • 基于若依框架前端学习VUE和TS的核心内容
  • 函数、数组与 grep + 正则表达式的 Linux Shell 编程进阶指南
  • windows10专业版系统安装本地化mysql服务端
  • AI公共数据分析完整实战教程:从原始数据到商业洞察【网络研讨会完整回放】
  • golang -- viper