抖音开放平台Logo
开发者文档
控制台

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 信息。从基础库2.82.0版本开始不再支持本属性,不建议使用。

complete

boolean

图片的是否加载成功,true 为成功,false 为失败。从基础库2.82.0版本开始不再支持本属性,不建议使用,触发onload回调即代表图片加载成功。

代码示例

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) }

该文档是否有帮助?