Vue实现base64编码图片间的切换功能

yizhihongxing

要实现Vue中base64编码图片间的切换功能,需要以下步骤:

1. 生成base64编码图片

使用FileReader对象和canvas元素可以将普通图片转化成base64编码图片,具体步骤如下:

// 生成base64编码图片
const file = e.target.files[0]
const reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = () => {
  const img = new Image()
  img.src = reader.result
  img.onload = () => {
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')
    canvas.width = img.width
    canvas.height = img.height
    ctx.drawImage(img, 0, 0, img.width, img.height)
    const base64Img = canvas.toDataURL('image/png', 1)
    this.base64Img = base64Img // 存储base64编码图片
  }
}

2. 实现切换功能

可以使用v-ifv-show指令来控制图片的显示与隐藏。具体步骤如下:

<template>
  <div>
    <button @click="showFirstImg">显示第一个图片</button>
    <button @click="showSecondImg">显示第二个图片</button>
    <img v-if="showFirst" :src="firstImg" />
    <img v-if="showSecond" :src="secondImg" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      showFirst: true,
      showSecond: false,
      firstImg: '', // 第一个图片的base64编码字符串
      secondImg: '', // 第二个图片的base64编码字符串
    }
  },
  methods: {
    showFirstImg() {
      this.showFirst = true
      this.showSecond = false
    },
    showSecondImg() {
      this.showFirst = false
      this.showSecond = true
    },
  },
}
</script>

示例一:

<template>
  <div>
    <label for="file">上传图片:</label>
    <input type="file" @change="convertFileToBase64" />
    <button @click="showImage">显示图片</button>
    <img v-if="show" :src="base64Img" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      base64Img: '', // 存储base64编码图片
      show: false,
    }
  },
  methods: {
    convertFileToBase64(e) {
      // 生成base64编码图片
      const file = e.target.files[0]
      const reader = new FileReader()
      reader.readAsDataURL(file)
      reader.onload = () => {
        const img = new Image()
        img.src = reader.result
        img.onload = () => {
          const canvas = document.createElement('canvas')
          const ctx = canvas.getContext('2d')
          canvas.width = img.width
          canvas.height = img.height
          ctx.drawImage(img, 0, 0, img.width, img.height)
          const base64Img = canvas.toDataURL('image/png', 1)
          this.base64Img = base64Img
        }
      }
    },
    showImage() {
      // 显示base64编码图片
      this.show = true
    },
  },
}
</script>

示例二:

<template>
  <div>
    <label for="file1">上传第一个图片:</label>
    <input type="file" id="file1" @change="convertFileToBase64(1)" />
    <label for="file2">上传第二个图片:</label>
    <input type="file" id="file2" @change="convertFileToBase64(2)" />
    <button @click="showFirstImg">显示第一个图片</button>
    <button @click="showSecondImg">显示第二个图片</button>
    <img v-if="showFirst" :src="firstImg" />
    <img v-if="showSecond" :src="secondImg" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      firstImg: '', // 第一个图片的base64编码字符串
      secondImg: '', // 第二个图片的base64编码字符串
      showFirst: true,
      showSecond: false,
    }
  },
  methods: {
    convertFileToBase64(index) {
      // 生成base64编码图片
      const file = index === 1 ? this.$refs.file1.files[0] : this.$refs.file2.files[0]
      const reader = new FileReader()
      reader.readAsDataURL(file)
      reader.onload = () => {
        const img = new Image()
        img.src = reader.result
        img.onload = () => {
          const canvas = document.createElement('canvas')
          const ctx = canvas.getContext('2d')
          canvas.width = img.width
          canvas.height = img.height
          ctx.drawImage(img, 0, 0, img.width, img.height)
          const base64Img = canvas.toDataURL('image/png', 1)
          if (index === 1) {
            this.firstImg = base64Img
          } else if (index === 2) {
            this.secondImg = base64Img
          }
        }
      }
    },
    showFirstImg() {
      // 显示第一个图片
      this.showFirst = true
      this.showSecond = false
    },
    showSecondImg() {
      // 显示第二个图片
      this.showFirst = false
      this.showSecond = true
    },
  },
}
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue实现base64编码图片间的切换功能 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • 详解Vue使用命令行搭建单页面应用

    非常感谢您关注本网站,以下是对“详解Vue使用命令行搭建单页面应用”的完整攻略: 一、简介 Vue.js是一个流行的JavaScript框架,它使用MVVM模式来构建单页面应用程序。 而命令行是可以让我们方便地执行许多自动化任务的强大工具。接下来,我们将使用命令行来构建一个Vue.js单页面应用程序。 二、步骤 1. 安装Node.js和Vue.js 在开始…

    Vue 2023年5月28日
    00
  • Vue3从0搭建Vite打包组件库使用详解

    下面我将详细讲解“Vue3从0搭建Vite打包组件库使用详解”的完整攻略。 如何搭建 步骤一:安装Vue CLI 首先安装 Vue CLI。打开终端并运行以下命令: npm install -g @vue/cli 步骤二:创建Vue项目 生成一个新的Vue项目,安装 Vue Router 和 Vuex。进入项目路径,执行以下命令: vue create my…

    Vue 2023年5月29日
    00
  • vue3组合式API中setup()概念和reactive()函数的用法

    Vue 3的组合式API是一种全新的API,可以帮助我们更好地组织代码,以及管理组件内的状态和逻辑。其中,setup()是一个非常重要的概念,而reactive()则是其核心函数之一。 什么是setup()函数 setup()函数是组合式API中的一个重要概念,它允许我们在组件初始化时进行一些设置,例如定义变量、创建函数等等。这个函数在组件实例化之前被调用,…

    Vue 2023年5月28日
    00
  • Vue 2中ref属性的使用方法及注意事项

    Vue 2中的ref属性是一个非常有用的功能,可以用来在Veu实例中访问组件、元素或子组件。以下是关于Vue 2中ref属性的使用方法及注意事项的攻略。 什么是ref属性 ref是Vue提供的一个属性,可以用来在Vue实例中设置、组件或元素的标识,通过这个标识可以直接在Vue实例中访问相应的实例或元素。 ref属性的使用方法 在Vue模板中使用ref属性需要…

    Vue 2023年5月28日
    00
  • Vue源码之关于vm.$delete()/Vue.use()内部原理详解

    Vue源码之关于vm.$delete()/Vue.use()内部原理详解 Vue.$delete()方法 在Vue中,我们可以使用vm.$delete()方法从Vue实例或嵌套对象中删除响应式属性。这个方法是私有的,也就是说它只存在于Vue内部,并没有对外暴露。下面我们来详细讲解一下Vue.$delete()方法的内部原理。 源码解析 Vue.$delete…

    Vue 2023年5月28日
    00
  • 详解vue中多个有顺序要求的异步操作处理

    本文讲解如何在 Vue.js 应用中处理多个具有顺序要求的异步操作。可能的场景包括:一个 Ajax 请求需要得到一个 token 并在其成功返回后才能进行;多个 Ajax 请求需要按特定顺序进行。对于这种情况,我们可以使用 Promise、async/await、发布订阅模式等技术手段来处理。 Promise Promise 是 JavaScript 中处理…

    Vue 2023年5月27日
    00
  • 初识 Vue.js 中的 *.Vue文件

    初识 Vue.js 中的 .vue 文件 在 Vue.js 中,.vue 文件是一个自定义的单文件组件(Single-File Component),可以将 HTML、CSS 和 JavaScript 集中到一个 .vue 文件中,并进行组件化开发。 一个 .vue 文件一般包含三部分:template(模板)、script(脚本)和 style(样式),它…

    Vue 2023年5月28日
    00
  • 详解Vue3中setup函数的使用教程

    那我就来详细讲解一下“详解Vue3中setup函数的使用教程”的完整攻略。 一、什么是setup函数 setup函数是Vue3中的一个核心新功能,负责替代Vue2的created、beforeCreate、mounted、beforeMount等声明周期钩子函数。 setup函数在组件实例化之前执行,可以被认为是组件的入口函数,负责初始化组件,返回data、…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部