写一个图片转base64的hooks
# 写一个图片转base64的hooks
Vue3中一个hooks其实就是一个函数。
export default (options: Options):Promise<{base64: string}> => {}
获取图片DOM
import {onMounted} from 'vue'
onMounted(() => {
const img:HTMLImageElement = document.querySelector(options.el)
})
使用canvas将图片转为base64字符串
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, el.width, el.height)
return canvas.toDataURL('image/jpg')
}
drawImage的参数:
| 参数 | 描述 |
|---|---|
| img | 要使用的图像、画布或视频 |
| sx | 可选,开始剪切的x坐标位置 |
| sy | 可选,开始剪切的y坐标位置 |
| swidth | 可选,被剪切图像的宽度 |
| sheight | 可选,被剪切图像的高度 |
| x | 在画布上放置图像的x坐标位置 |
| y | 在画布上放置图像的y坐标位置 |
| width | 可选,要使用的图像的宽度(伸展或缩小图像) |
| height | 可选,要使用的图像的高度(伸展或缩小图像) |
使用上面的函数
onMounted(() => {
const img:HTMLImageElement = document.querySelector(options.el)
img.onload = () => {
base64(img)
}
})
用promise包装一下,完整代码
import {onMounted} from 'vue'
type Options = {
el:string
}
export default (options: Options):Promise<{base64: string}> => {
return new Promise((resolve) => {
onMounted(() => {
const img:HTMLImageElement = document.querySelector(options.el)
img.onload = () => {
resolve({
base64: 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, el.width, el.height)
return canvas.toDataURL('image/jpg')
}
})
}