火山引擎 HarmonyOS NEXT 图片加载 SDK 基于鸿蒙图片加载开源库 ImageKnife 3.0.0-rc.6 版本进行开发,额外提供了 HEIC 软解能力。本文为您介绍如何将 HarmonyOS NEXT 图片加载 SDK 集成到您的项目中,并使用 SDK 提供的功能。
发版日期 | 版本号 | 说明 |
---|---|---|
2025-01-03 | 1.0.0-tob | HarmonyOS NEXT 图片加载 SDK 初次发布。 |
说明
在项目根目录中添加 SDK 依赖下载地址配置文件.ohpmrc
。
编辑.ohpmrc
文件,并在文件中追加如下内容。
@imagex:registry=https://artifact.bytedance.com/repository/byted-ohpm/ @codec:registry=https://artifact.bytedance.com/repository/byted-ohpm/ @bytedance:registry=https://artifact.bytedance.com/repository/byted-ohpm/
在工程的 entry 下的 oh-package.json5
文件中添加本地依赖。
// 请传入 SDK 在您项目中的实际路径 "dependencies": { // 鉴权依赖 "@imagex/imagex_authorization": "0.0.4-tob", // 加载库 "@imagex/imagex_bdimageknife": "1.0.0-tob" }
请将获取的 Token 和授权码填入以下代码中,完成鉴权的配置以及初始化操作。
// 建议将以下内容放在主页面加载之前 onWindowStageCreate(windowStage: window.WindowStage): void { let config: AuthInitConfig = new AuthInitConfig(this.context, "token", ["authCode"]); //请依次填写 Token 和授权码 Authorization.init(config); windowStage.loadContent('xxx', (err) => { ... }); }
ImageKnifeComponent({ ImageKnifeOption: { loadSrc: $r("app.media.app_icon"), placeholderSrc: $r("app.media.loading"), errorholderSrc: $r("app.media.app_icon"), objectFit: ImageFit.Auto } }).width(100).height(100)
ImageKnifeComponent({ ImageKnifeOption: { loadSrc: this.localFile, placeholderSrc: $r("app.media.loading"), errorholderSrc: $r("app.media.app_icon"), objectFit: ImageFit.Auto } }).width(100).height(100)
ImageKnifeComponent({ ImageKnifeOption: { loadSrc:"https://www.openharmony.cn/_nuxt/img/logo.dcf95b3.png", placeholderSrc: $r("app.media.loading"), errorholderSrc: $r("app.media.app_icon"), objectFit: ImageFit.Auto } }).width(100).height(100)
ImageKnifeComponent({ ImageKnifeOption: { loadSrc: "https://file.atomgit.com/uploads/user/1704857786989_8994.jpeg", placeholderSrc: $r("app.media.loading"), errorholderSrc: $r("app.media.app_icon"), objectFit: ImageFit.Auto, customGetImage: custom } }).width(100).height(100) // 自定义实现图片获取方法,如自定义网络下载 @Concurrent async function custom(context: Context, src: string | PixelMap | Resource): Promise<ArrayBuffer | undefined> { console.info("ImageKnife:: custom download:" + src) // 举例写死从本地文件读取,也可以自己请求网络图片 return context.resourceManager.getMediaContentSync($r("app.media.bb").id).buffer as ArrayBuffer }
ImageKnifeComponent({ ImageKnifeOption: { loadSrc:"https://www.openharmony.cn/_nuxt/img/logo.dcf95b3.png", progressListener:(progress:number)=>{console.info("ImageKinfe:: call back progress = " + progress)} } }).width(100).height(100)
ImageKnifeComponent({ ImageKnifeOption: { loadSrc: $r("app.media.rabbit"), border: {radius:50} } }).width(100).height(100)
ImageKnifeComponent({ { loadSrc: $r('app.media.pngSample'), placeholderSrc: $r("app.media.loading"), errorholderSrc: $r("app.media.app_icon"), objectFit: ImageFit.Contain, border: { radius: { topLeft: 50, bottomRight: 50 } }, // 圆角设置 } }).width(300) .height(300) .rotate({ angle: 90 }) // 旋转90度 .contrast(12) // 对比度滤波器
ImageKnifeComponent({ ImageKnifeOption: { loadSrc: $r("app.media.rabbit"), onLoadListener:{ onLoadStart:()=>{ this.starTime = new Date().getTime() console.info("Load start: "); }, onLoadFailed: (err) => { console.error("Load Failed Reason: " + err + " cost " + (new Date().getTime() - this.starTime) + " milliseconds"); }, onLoadSuccess: (data) => { console.info("Load Successful: cost " + (new Date().getTime() - this.starTime) + " milliseconds"); return data; }, } } }).width(100).height(100)
初始化文件缓存数量和大小。
(context: Context, size: number = 256, memory: number = 256 * 1024 * 1024): void
名称 | 类型 | 是否必选 | 默认值 | 说明 |
---|---|---|---|---|
context | Context | 是 | 无 | 上下文 |
size | number | 否 | 256 | 缓存个数 |
memory | number | 否 | 256 * 1024 * 1024 | 缓存大小 |
void
预加载并返回文件缓存路径。
(loadSrc: string | ImageKnifeOption): Promise<string>
名称 | 类型 | 是否必选 | 默认值 | 说明 |
---|---|---|---|---|
loadSrc | string I ImageKnifeOption | 是 | 无 | 设置预加载 url 或者预加载 ImageKnifeOption |
Promise<string>
全局添加 HTTP 请求头。
(key: string, value: Object): void
名称 | 类型 | 是否必选 | 默认值 | 说明 |
---|---|---|---|---|
key | string | 是 | 无 | 请求 Header 的键 |
value | Object | 是 | 无 | 请求 Header 的值 |
void
全局设置 HTTP 请求头。
(options: Array<HeaderOptions>): void
名称 | 类型 | 是否必选 | 默认值 | 说明 |
---|---|---|---|---|
options | Array | 是 | 无 | 全局设置 Header 集合 |
void
全局删除 HTTP 请求头。
(key: string): void
名称 | 类型 | 是否必选 | 默认值 | 说明 |
---|---|---|---|---|
key | string | 是 | 无 | 指定要删除的 Header 的键 |
void
参数 | 类型 | 是否必选 | 默认值 | 说明 |
---|---|---|---|---|
loadSrc |
| 是 | 无 | 主图展示 |
placeholderSrc |
| 否 | 无 | 占位图图展示 |
errorholderSrc |
| 否 | 无 | 错误图展示 |
objectFit |
| 否 | 无 | 主图填充效果 |
placeholderObjectFit |
| 否 | 无 | 占位图填充效果 |
errorholderObjectFit |
| 否 | 无 | 错误图填充效果 |
writeCacheStrategy |
| 否 | 无 | 写入缓存策略 |
onlyRetrieveFromCache |
| 否 | 无 | 是否跳过网络和本地请求 |
border |
| 否 | 无 | 边框圆角 |
priority |
| 否 |
| 加载优先级 |
context |
| 否 | 无 | 上下文 |
progressListener |
| 否 | 无 | 进度 |
headerOption |
| 否 | 无 | 设置请求头 |
onLoadListener |
| 否 | 无 | PixelMap |