Signed-off-by: longfeng <longfeng20@huawei.com> |
||
---|---|---|
AppScope | ||
entry | ||
gpu_transform | ||
hvigor | ||
library | ||
.eslintignore | ||
.gitignore | ||
CHANGELOG.md | ||
LICENSE | ||
NOTICE | ||
OAT.xml | ||
README.OpenSource | ||
README.md | ||
build-profile.json5 | ||
hvigorfile.ts | ||
hvigorw | ||
hvigorw.bat | ||
oh-package.json5 |
README.md
ImageKnife
专门为OpenHarmony打造的一款图像加载缓存库,致力于更高效、更轻便、更简单。
简介
本项目参考开源库 Glide 进行OpenHarmony的自研版本:
- 支持内存缓存,使用LRUCache算法,对图片数据进行内存缓存。
- 支持通过initMemoryCache自定义策略内存缓存策略和大小。
- 支持磁盘二级缓存,对于下载图片会保存一份至磁盘当中。
- 支持option自定义实现图片获取/网络下载
- 支持监听网络下载回调进度
- 继承Image的能力,支持option传入border,设置边框,圆角
- 继承Image的能力,支持option传入objectFit设置图片缩放
- 支持通过设置transform缩放图片
- 并发请求数量,支持请求排队队列的优先级
待实现特性
- gif/webp动图显示与控制
- 内存降采样优化,节约内存的占用
- 支持自定义图片加载和请求并发数量
- 支持声明周期已销毁的图片,不再发起请求
- 支持自定义图片解码
- 支持自定义key的实现
- 支持进行图片变换: 支持图像像素源图片变换效果。
待确认arkui的能力
- 精确获取开发者给组件设置的宽和高
- 动图的显示与控制
下载安装
ohpm install @ohos/imageknife
使用说明
1.显示本地资源图片
ImageKnifeComponent({
ImageKnifeOption: {
src: $r("app.media.app_icon"),
placeholderSrc: $r("app.media.loading"),
errorholderSrc: $r("app.media.app_icon"),
objectFit: ImageFit.Auto
}
}).width(100).height(100)
2.显示本地context files下文件
ImageKnifeComponent({
ImageKnifeOption: {
src: this.localFile,
placeholderSrc: $r("app.media.loading"),
errorholderSrc: $r("app.media.app_icon"),
objectFit: ImageFit.Auto
}
}).width(100).height(100)
3.显示网络图片
ImageKnifeComponent({
ImageKnifeOption: {
src:"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)
4.自定义下载图片
ImageKnifeComponent({
ImageKnifeOption: {
src: "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
}
5.监听网络下载进度
ImageKnifeComponent({
ImageKnifeOption: {
src:"https://www.openharmony.cn/_nuxt/img/logo.dcf95b3.png",
progressListener:(progress:number)=>{console.info("ImageKinfe:: call back progress = " + progress)}
}
}).width(100).height(100)
6.支持option传入border,设置边框,圆角
ImageKnifeComponent({ ImageKnifeOption:
{
src: $r("app.media.rabbit"),
border: {radius:50}
}
}).width(100).height(100)
约束与限制
API11
贡献代码
使用过程中发现任何问题都可以提 issue 给我们,当然,我们也非常欢迎你给我们发 PR 。
开源协议
本项目基于 Apache License 2.0 ,请自由的享受和参与开源。
遗留问题
- reuse组件错位问题
- 添加组件闪动问题