<template>
<div>
<img id="img" width="300" height="300" src="../assets/icon-bg-detail-0.jpg"/>
</div>
</template>
<script setup lang="ts">
import useBase64 from './hooks'
useBase64({
el:'#img'
}).then((res) => {
console.log(res.baseUrl)
})
</script>
<style lang="less" scoped>
</style>
import { onMounted } from 'vue'
type Options = {
el: string
}
export default function(options:Options):Promise<{ baseUrl: string }> {
return new Promise((resolve) => {
onMounted(() => {
let img:HTMLImageElement = document.querySelector(options.el) as HTMLImageElement
console.log(img, '---------->')
img.onload = () => {
resolve({
baseUrl: base64(img)
})
}
const base64 = (el:HTMLImageElement) => {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
canvas.width = el.width
canvas.height = el.height
ctx?.drawImage(el, 0, 0, canvas.width, canvas.height)
return canvas.toDataURL('image/jpg')
}
})
})
}