tt.createImage收藏我的收藏
收藏
我的收藏
基础库 1.31.0 开始支持本方法,低版本需做兼容处理。
创建一个图片对象。
语法
tt.createImage();
参数说明
无
返回值
返回值为object
类型,详细参数描述如下:
参数 | 参数类型 | 说明 |
---|---|---|
src | string | 图片的 URL, base64 内容, 或者 ArrayBuffer 数据 |
width | number | 图片的真实宽度 |
height | number | 图片的真实高度 |
事件
事件名 | 说明 |
---|---|
load | 通过 addEventListener 监听图片加载完成后触发的回调函数 |
error | 通过 addEventListener 监听图片加载发生错误后触发的回调函数 |
回调函数的参数说明
类型为 object 类型,属性如下
参数 | 参数类型 | 说明 |
---|---|---|
target | object | 加载成功为实际的图片信息,加载失败时返回无效的信息 |
type | string | 回调函数的类型,load 表示加载成功,error 表示加载失败 |
加载完成时 target 的参数说明
参数 | 参数类型 | 说明 |
---|---|---|
width | number | 图片的真实宽度。 |
height | number | 图片的真实高度。 |
data | string | 图片的 buffer 信息。从基础库 |
complete | boolean | 图片的是否加载成功,true 为成功,false 为失败。从基础库 |
代码示例
const image = tt.createImage(); image.src = "https:xxx.png"; image.width = 200; image.height = 200; image.addEventListener("load", (res) => { console.log("加载成功"); }); image.addEventListener("error", (res) => { console.log("加载失败"); });
Bug & Tip
- Tip: 图片的 src 可以接受网络地址,本地 ttfile:// 协议地址,base64 格式,以及 ArrayBuffer 格式的数据内容。
- Tip: 通过该 API 直接创建图片显示的方法不需要配置图片白名单。
- Tip: 在开放数据域中,通过该方法创建的图片只能显示与自己头像地址,即 tt.getUserInfo 返回的 avatarUrl 相同主机名的内容。
- Tip: 如果开发者在开发时使用了引擎,部分引擎所实现图片渲染的能力可能需要先进行图片下载,如果不想配置过多的图片白名单,可以通过改写引擎的图片能力解决该问题,具体请参考以下代码示例。
【代码示例 1】:结合 cocos 引擎的解决方案,cocos 3.x 版本可能不适配。
export const headImgExt = ".head"; /** * 新版本的cocos加载头像的时候,需要先下载,但是在字节小游戏平台下,会有跨域的问题。这个方法需要在进入游戏后加载前调用 * 加载头像的用法:cc.assetManager.loadRemote(url,{ext:headImgExt},(err,texture)=>{}); * 所有不想下载直接使用的图像都可以加上{ext:headImgExt}来使用 */ export function registerHeadImgLoader() { cc.assetManager.downloader.register(headImgExt, (content, options, onComplete) => { onComplete(null, content); }); cc.assetManager.parser.register(headImgExt, downloadDomImage); function createTexture(id, data, options, onComplete) { let out = null, err = null; try { out = new cc.Texture2D(); out._uuid = id; out._nativeUrl = id; out._nativeAsset = data; } catch (e) { err = e; } onComplete && onComplete(err, out); }(cc.assetManager as any).factory.register(headImgExt, createTexture); } function downloadDomImage (url , options, onComplete ) { const img = new Image(); if (window.location.protocol !== 'file:') { img.crossOrigin = 'anonymous'; } function loadCallback () { img.removeEventListener('load', loadCallback); img.removeEventListener('error', errorCallback); if (onComplete) { onComplete(null, img); } } function errorCallback () { img.removeEventListener('load', loadCallback); img.removeEventListener('error', errorCallback); if (onComplete) { onComplete(new Error(url)); } } img.addEventListener('load', loadCallback); img.addEventListener('error', errorCallback); img.src = url; return img; }
【代码示例 2】:结合 Laya 引擎的解决方案
//this.localAvatarImage : Laya.Image const localImage = new Image() localImage.src = localPlayer.userInfo.avatarUrl; localImage.onload = () => { const scale = localImage.width / this.remoteAvatarImage.width const t2d = new Laya.Texture2D(localImage.width / scale, localImage.height / scale, (Laya as any).TextureFormat.R8G8B8A8) this.localAvatarImage.graphics.drawImage(new Laya.Texture(t2d), 0, (this.localAvatarImage.height - localImage.height / scale) / 2) t2d.loadImageSource(localImage) }
该文档是否有帮助?