html5 - le canevas ne peut parfois pas accéder aux données toDataURL
高洛峰
高洛峰 2017-06-06 09:53:01
0
2
801

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();
                    });
        }
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(2)
为情所困

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

.
伊谢尔伦

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!