项目需求,需要在注册界面显示图片验证码,服务器发过来的是二进制码流,在客户端需要转成图片,在Sprite上显示出来
二进制码流是什么码流?如果是图片文件本身的二进制码,那你客户端收集完成码流后,就还是一张图片。问题就变成了服务器发一个图片,客户端如何接收图片,然后用图片创建Sprite
客户端接收的是一组二进制数据或者基于Base64的,要把这个字符串还原成图片
在cocos引擎里面找到了createSpriteFromBase64这个函数,但是好像没有暴露出来
那可以自己实现类似的功能:
base64解码(没自带的话, 就找第三方库) -> 利用解码数据创建图片 -> 再用图片创建精灵
int length = base64Decode((const unsigned char*)base64String, (unsigned int)strlen(base64String), &decoded);
Image *image = new (std::nothrow) Image();
bool imageResult = image->initWithImageData(decoded, length);
另一个方法,自己加绑定
http://forum.cocos.com/t/js-c-jsb-jsbinding/37909
你说的第一种方法,我也百度到了,关键就是解码数据创建图片这一块,cocos js没有接口,你提供的那一段代码应该是C++的吧
估计只能自己注册一个函数来实现了
cc.loader.load(url.jpg, …)在你的url后面加上jpg后缀,回调参数回返texture2d对象。
http请求返回图片二进制流就可以了
cc.loader.load({url: ‘http://example.com/getImageREST?file=a.png’, type: ‘png’}, function (err, tex) {
cc.log('Should load a texture from RESTful API by specify the type: ’ + (tex instanceof cc.Texture2D));
});
你说在哪里传二进制流?我这边服务器并不会在服务器本地生成一个图片,所以是没有对应的URL的,只会生成一个二进制码流返回给客户端
麻烦大侠能再详细说下嘛?
url后面?是参数,png要加在URL参数之前,先在浏览器上测试通过再用cc.loader.load
自己额解决了。。。
app.http({ url: “/captcha/create”,
responseType: “blob”,
}, function (ok, xhr) {
var checkurl = URL.createObjectURL(xhr.response);
cc.loader.load({ url: checkurl, type: ‘jpeg’ }, function (err, tex) {
cc.log('Should load a texture from external url: ’ + (tex instanceof cc.Texture2D));
self.checkSprite.spriteFrame.setTexture(tex);
});
});
怎么解解的啊