javaScript实现图片复制

192 阅读1分钟

场景:

image.png

点击复制按钮,复制图片,可以粘贴在别处(比如微信,钉钉)

其实就是鼠标右键图片,点击复制图片的简化操作,两步变一步。

话不多说直接上代码

copyImage(imageUrl) {
    // 创建canvas
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')

    const img = new Image()
    // 告诉浏览器在加载图片时要以匿名方式进行跨域请求
    img.crossOrigin = 'Anonymous'

    let _this = this
    img.onload = function () {
        canvas.width = img.width
        canvas.height = img.height
        ctx?.drawImage(img, 0, 0)

        canvas.toBlob(blob => {
            navigator.clipboard.write([
                new ClipboardItem({ 'image/png': blob })
            ]).then(() => {
                _this.$message.success('Copy successfully')
            }).catch(error => {
                console.log('error: ', error);
            })
        }, 'image/png')
    }
    img.src = imageUrl
}

使用方式

    const imgEl = document.querySelector('.imageEl')
    const imgUrl = imgEl.src
    copyImage(imgUrl)

注意点: navigator.clipboard 只在安全网络下可用(https),http下是undefined,需要做特殊处理

copyPhoto(photo) {
    // 完整的图片路径 image.src
    const imgUrl = config.ossPrefix + photo.filePath
    let _this = this

    if (!navigator.clipboard) {
        const textareaEl = document.createElement('textarea')
        textareaEl.value = imgUrl
        document.body.appendChild(textareaEl)

        textareaEl.select()

        document.execCommand('copy')
        document.body.removeChild(textareaEl)
        _this.$message.success('Copy successfully')
        return
    }

    // 创建canvas
    const canvas = document.createElement('canvas')
    const ctx = canvas.getContext('2d')

    const img = new Image()
    img.crossOrigin = 'Anonymous'

    img.onload = function () {
        canvas.width = img.width
        canvas.height = img.height
        ctx?.drawImage(img, 0, 0)

        canvas.toBlob(blob => {
            //@ts-ignore
            navigator.clipboard.write([
                //@ts-ignore
                new ClipboardItem({ 'image/png': blob! })
            ]).then(() => {
                _this.$message.success('Copy successfully')
            }).catch(error => {
                console.log('error: ', error);
            })
        }, 'image/png')
    }
    img.src = imgUrl
}