Egret社区

头像跨域解决方法

2018-6-28 16:44
9641
核心原理还是靠RenderTexture。论坛已经有几个实力帖了,我简化一下。
参考:

http://bbs.egret.com/thread-30775-1-1.html

http://bbs.egret.com/thread-47299-1-1.html 这位作者的地图迷雾帖非常不错,不管用到用不到都推荐各位看看

[mw_shl_code=javascript,true]                let self = this;
        let imgLoader = new egret.ImageLoader();
                imgLoader.crossOrigin = "anonymous";// 这个好像没什么用处,加不加都可以
        imgLoader.once(egret.Event.COMPLETE,function(evt: egret.Event){
            if(evt.currentTarget.data){
                                egret.log("加载头像成功: "+evt.currentTarget.data);
                                // 创建一个容器
                                let container = new egret.DisplayObjectContainer();
                                let texture = new egret.Texture();
                                texture.bitmapData = evt.currentTarget.data;
                                let bitmap = new egret.Bitmap(texture);
                                // 将头像放到容器内
                                container.addChild(bitmap);
                                let renderTexture: egret.RenderTexture = new egret.RenderTexture();
                                // 将容器绘制成纹理
                                renderTexture.drawToTexture(container);
                                // 将纹理赋给头像组件(eui.Image)
                self.headicon.source = renderTexture;
                                // 释放纹理
                                bitmap.texture.dispose();
                                bitmap = null;
                                // renderTexture被头像组件引用了,不能释放
                                // renderTexture.dispose();
                                // renderTexture = null;
            }
        },this);
        imgLoader.once(egret.IOErrorEvent.IO_ERROR,function(evt: egret.Event) {
            egret.log("加载头像失败");
        },this);
        if(CommonData.userInfo.headimgurl){
                        imgLoader.load( (<string>CommonData.userInfo.headimgurl).replace(/[\\]/g,''));// 去除链接中的转义字符‘\’
        }

                // 另外一种方法就是先下载到自己服务器再传给客服端,推荐使用base64
                let imgbase64 = "data:image/jpg;base64,/9j/4AAQSkZJ......"
                egret.BitmapData.create("base64",imgbase64.split(",")[1],(bitmapData) => {
                        let texture = new egret.Texture();
                texture.bitmapData = bitmapData;
                        self.headicon.source = texture;
                });[/mw_shl_code]
分享到 :
0 人收藏

1 个回复

倒序浏览
云里雾里  圆转纯熟 | 2018-6-28 17:20:39
我记得原先是加了egret.ImageLoader.crossOrigin = "anonymous";  来解决跨域的。你可以试试。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部