html canvas blob image 污染源

11 篇文章 0 订阅
9 篇文章 0 订阅

html canvas 被污染

当html中的图片来自于另外一个网站时,canvas被污染,这样,toDataURL和toBlob等函数等都不可以输出了,当canvas被污染的时候怎么做?https://developer.mozilla.org/的解决方案如下图:
mozilla解决方案

canvas 其中的图片来自于另外一个网站,再在四周画一个框,然后输出,正常。
图片加自己画框

show me the code

代码如下,和官方解决方式不太一样,我们使用下载图片,得到二进制来做这个事情。一样达到效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Canvas toBlob and download</title>
</head>
<body>
<!-- <img src ="http://192.168.0.129:8089/0.png" />  -->
<canvas id="canvas"></canvas>

</body>
<script>
	function downloadByBlob(blobObj) {
        const link = document.createElement('a');
        link.style.display = 'none';
        const downloadUrl = window.URL.createObjectURL(blobObj);
        link.href = downloadUrl;
        link.download = `test.png`;
        document.body.appendChild(link);
        link.click();
        link.remove();
    };
    function getImageBlob(ctx,url,callback) {
            const xhr = new XMLHttpRequest();
            xhr.open('GET', url, true);
            xhr.responseType = 'blob';
            xhr.onload = function () {
                if (parseInt(this.status, 10) === 200) {
                    if (typeof callback === 'function') {
                        callback(ctx,URL.createObjectURL(this.response));
                    }
                }
            };
            xhr.send();
    }
 
    function getImage(ctx, e) {
    const img = new Image();
    img.src = e;
    img.onload = function () {
         ctx.rect(0,0,640,360);  
         ctx.lineWidth = 10;
         ctx.strokeStyle = "red";
         ctx.stroke();
        ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, 400, 400);
        canvas.toBlob(
        function (blob) {
           url = URL.createObjectURL(blob);
            downloadByBlob(blob);
        });
        }
    }
 

    var canvas = document.getElementById("canvas");
	    canvas.width = 640;
        canvas.height = 360;
        var context = canvas.getContext('2d');
         getImageBlob(context,'http://192.168.0.129:8089/0.png', 
                 getImage);

        // getImageBlob(context,'http://192.168.0.240:3002/cache/convert/97e2e43c222f86e4e4293f2b6996a51f/0.png', 
        //         getImage);

        // var dImg = document.createElement("img");
        // //dImg.crossOrigin = "*";
        // dImg.src = "http://192.168.0.240:3002/cache/convert/97e2e43c222f86e4e4293f2b6996a51f/0.png"
        // dImg.onload = function(){
        //     //URL.revokeObjectURL(url);
        // dImg.setAttribute("crossOrigin",'Anonymous')
           
        //     console.log("draw over");
        //     context.rect(0,0,640,360);  
        // context.moveTo(10,10);
        // context.lineTo(100,100);
        // context.lineTo(500,100);
        // context.lineWidth = 10;
        // context.strokeStyle = "red";
        // context.stroke();
        // context.drawImage(dImg,0,0,200,400);

        //     canvas.toBlob(
        // function (blob) {
        //     var newImg = document.createElement("img"),
        //         url = URL.createObjectURL(blob);
        //     downloadByBlob(blob);
        //     newImg.onload = function () {
        //         URL.revokeObjectURL(url);
        //     };
 
        //     newImg.src = url;
        //     document.body.appendChild(newImg);
        // });
</script>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianbo_insist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值