js实现复制图片到剪切板

前端开发,需要实现把图片复制到剪切板的功能,具体实现方式如下所示:


const copyImageToClipboard = async function(imageUrl) {
    // 创建一个Image对象
    const img = new Image();
    img.src = imageUrl;
    // 等待图片加载完成
    await img.decode();
    // 创建一个Canvas元素
    const canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    const ctx = canvas.getContext('2d');
    // 在Canvas上绘制图片
    ctx.drawImage(img, 0, 0);
    // 将Canvas内容转换为DataURL
    const dataURL = canvas.toDataURL('image/png');
    // 将DataURL复制到剪切板
    await navigator.clipboard.write([
        new ClipboardItem({
        [dataURL.match(/^data:(.+?);/)[1]]: await fetch(dataURL).then(r => r.blob())
        })
    ])
    .then(() =>{
        Message.success('图片已复制到剪切板') 
    })
    .catch(err => console.error('复制失败:', err));
}

注意,网络图片无法复制到剪切板,所以需要转换下

html2canvas(this.$refs.codeDom,{
    backgroundColor: "#ffffff",
    logging: false,
    allowTaint: true,  //开启跨域
    useCORS: true,
    scale:2,
    width: this.$refs.codeDom.offsetWidth,
    height: this.$refs.codeDom.offsetHeight
    }).then(canvas => {
        var context = canvas.getContext('2d');
        context.mozImageSmoothingEnabled = false;
        context.webkitImageSmoothingEnabled = false;
        context.msImageSmoothingEnabled = false;
        context.imageSmoothingEnabled = false;
        let img_png_src = canvas.toDataURL("image/png"); //将canvas保存为图片
        let imgData = img_png_src.replace(imgType('png'), 'image/octet-stream');                               
        copyImageToClipboard(imgData); 
        let filename = '分享图' + '.png' //下载图片的文件名                 
        saveImage(imgData,filename)                     
});

// 把图片转为二进制blob再进行保存

export const saveImage = function(data, fileName){
    const userAgent = navigator.userAgent.toLowerCase(); 
    if(/micromessenger/.test(userAgent)){    
        UploadImage.success(data);  
    }else{
        let dataBlob = dataURLtoBlob(data);  
        saveFile(URL.createObjectURL(dataBlob), fileName);
    }   
}

注意: 目前测试chrome浏览器和微信电脑端浏览器是可以实现复制图片,但是在firefox以及safari浏览器测试都无法复制,有啥好的解决办法也欢迎评论下方解答

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容