2

将file转化成blob

  • 利用URL.createObjectURL()
    let $img = document.getElementById('img')
    file.onchange = function (e) {
        let file = e.target.files[0]
        let fileUrl = window.URL.createObjectURL(file)
        $img.src = fileUrl
        img.onload = function () {
            // 手动回收
            URL.revokeObjectURL(fileUrl)
        }
    }
当选择图片后,生成的img src类似"blob:null/4304d4f3-c13b-43e8-83f6-8c80426520ff",能正常显示图片。

将file转化为DataURL

  • 利用FileReader.readAsDataURL()
    let $img = document.getElementById('img')
    file.onchange = function (e) {
        console.log(e.target.files)
        let file = e.target.files[0]
        const fr = new FileReader(file)
        fr.readAsDataURL(file)
        fr.onload = function () {
            $img.src = this.result
        }
    }

canvas转为DataURL

canvas画出来的图片,在html中的其他地方显示。这里的方法也是可以将canvas输出为Dataurl的来放到img标签中。
let imgSrc = canvas.toDataURL('image/png')
// canvas.toDataURL('image/jpeg')

canvas转为blob对象

将canvas输出为Blob对象,这样就可以像File对象一样操作它了
canvas.toBlob(function (blobObj) {
    console.log(blobObj) //blobObj就是blob对象(类文件)
})

Blob对象显示图片

同上,如果拿到blob对象,亦可以使用URL.createObjectURL()来进行转换
canvas.toBlob(function (blobObj) {
    console.log(blobObj) //blobObj就是blob对象(类文件)
    let imgSrc = window.URL.createObjectURL(blobObj)
    document.getElementById('img').src = imgSrc
})

最后附一个下载DataURL下载方法:

function downloadImg () {
    let aLink = document.createElement('a')
    aLink.download = 'fileName.png' // 文件名后缀需要和dataurl表示的相同,否则可能乱码
    aLink.href = dataUrl
    aLink.click()
}

杭州蘇小小
178 声望12 粉丝

我是一名 WEB前端 开发者不断在前端这条路上努力拼搏着。我喜欢代码的逻辑有序性,每一行代码都有其不同的作用,所有的代码加起来就可以让用户能愉快的体验我的产品。我喜欢研究,遇到难题我不退缩,我相信我可以...