Maison  >  Questions et réponses  >  le corps du texte

html5 - le canevas ne peut parfois pas accéder aux données toDataURL

Questions : 1. Je ne sais pas pourquoi, Canvasparfoisne peut pas obtenir les données de dessin, seulement "data:;". S'il vous plaît, dites-moi où j'ai mal écrit cela. 2. J'écris un canevas comme celui-ci. Y a-t-il quelque chose qui doit être optimisé ?

Code associé :

        initCanvas:function(opt){
            var self=this;
            var img=new Image();
            var ctx,type=opt?2:1;

            img.setAttribute('crossOrigin', 'anonymous');
            img.onload=function(){
                var $img=self._view._cropBlock.find('img');
                var sizes,ratio;
                var imgW=img.width;//要截取的图片(引用的图片)宽度
                var imgH=img.height;
                console.log('img',imgW,imgH);
                if(!opt){
                    sizes=self.getCanvasSize($img);
                    opt={
                        left:0,
                        top:0,
                        width:sizes.width,//画布的宽度
                        height:sizes.height//画布的高度
                    };
                    ratio=Number((opt.width/img.width).toFixed(2));
                }else{

                    ratio=Number(($img.width()/img.width).toFixed(2))-0.01;//实际img元素和图片实际比例,四舍五入需减0.01
                    opt.left=opt.left/ratio;//opt的参数值是基于实际img元素的,要获得基于实际图片的值
                    opt.top=opt.top/ratio;
                    imgW=opt.width/ratio;
                    imgH=opt.height/ratio;
                }
                self.canvas = document.createElement('canvas');
                $.extend(self.canvas,{width:opt.width,height:opt.height});

                ctx = self.canvas.getContext('2d');
                ctx.save();
                var width=self.canvas.width||400;
                var height=self.canvas.height||400;console.log(self.canvas,width,height);
                ctx.clearRect(0,0,width,height);
                ctx.drawImage(img,opt.left,opt.top,imgW,imgH,0,0,width,height);
                ctx.restore();

                self.getSearchList(self.canvas,{imgUrl:img.src,type:type});
                self.canvas.remove();
            };
            img.onerror=function(err){
                console.log('canvas error:'+err);
            };
            img.src=this._model.currentImg;
        },
        getSearchList:function(canvas,opt,callback){
            var self=this;
            var url=canvas.toDataURL("image/jpeg",0.2);
            $.extend(opt,{imgUrlBase64:url});

            callback=callback|| $.noop;
            common.services.getRecognizedResultList(opt)
                    .success(function(data){
                        self.searchList=data.results;
                        callback();
                    });
        }
高洛峰高洛峰2715 Il y a quelques jours869

répondre à tous(2)je répondrai

  • 为情所困

    为情所困2017-06-06 09:55:01

    Si l'image est trop grande, l'appelcanvas.toDataURLpeut parfois échouer. Il est recommandé de compresser l'image avant d'appeler et de voir si cet article peut vous aider avec le téléchargement de fichiers

    .

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-06 09:55:01

    Je rencontre souvent ce genre de chose, il y a diverses raisons, généralement les paramètres sont erronés, jetez un oeil
    ctx.drawImage(img,opt.left,opt.top,imgW,imgH,0, 0,width,height) ;
    Si les paramètres de cette ligne ont des valeurs (veuillez imprimer les informations directement sur la ligne au-dessus de cette ligne de déclaration).
    S'il n'y a pas d'erreur, vous ne pouvez interrompre que lentement un module un par un pour l'éliminer.

    répondre
    0
  • Annulerrépondre