webp单帧图片直接返回pixelMap不返回frame

Signed-off-by: 2206069183@qq.com <2206069183@qq.com>
This commit is contained in:
2206069183@qq.com 2024-04-19 21:14:39 +08:00
parent 3e4f204027
commit 88d9df0278
6 changed files with 43 additions and 33 deletions

View File

@ -8,6 +8,7 @@
- 适配Sendable内存共享优化
- 修改全局请求头覆盖request请求头
- imageKnife支持heic测试demo独立页面展示
- webp单帧图片直接返回pixelMap不返回frame
## 2.1.2-rc.12
- 新增gif播放次数功能

View File

@ -186,7 +186,7 @@ struct testImageKnifeCache {
Button('默认')
.onClick(() => {
this.index_ = 2;
imageKnife?.isUrlExist(this.url).then(this.loadSuccess)
imageKnife?.isUrlExist(this.url, CacheType.Default, this.comSize).then(this.loadSuccess)
.catch(this.loadError);
})
}

View File

@ -393,13 +393,18 @@ export class ImageKnife {
if ((ImageKnifeData.GIF == filetype || ImageKnifeData.WEBP == filetype) && !request.dontAnimateFlag) {
let gifParseImpl = new GIFParseImpl()
gifParseImpl.parseGifs(cached, (data?: GIFFrame[], err?: BusinessError | string) => {
gifParseImpl.parseGifs(cached, (data?: GIFFrame[] | PixelMap, err?: BusinessError | string) => {
if (err) {
onError(err)
}
LogUtil.log("gifProcess data is null:" + (data == null));
if (!!data) {
let imageKnifeData = ImageKnifeData.createImageGIFFrame(ImageKnifeType.GIFFRAME, data);
let imageKnifeData: ImageKnifeData;
if((typeof (data as image.PixelMap).isEditable) == 'boolean') {
imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, (data as image.PixelMap));
}else {
imageKnifeData = ImageKnifeData.createImageGIFFrame(ImageKnifeType.GIFFRAME, (data as GIFFrame[]));
}
LogUtil.log('gifProcess 生成gif 返回数据类型')
onComplete(imageKnifeData)
} else {

View File

@ -536,7 +536,7 @@ export class RequestManager {
private gifProcess(onComplete: (value: PixelMap | GIFFrame[]) => void | PromiseLike<ImageKnifeData>, onError: (reason?: BusinessError | string) => void, arraybuffer: ArrayBuffer, typeValue: string, cacheStrategy?: (cacheData: ImageKnifeData) => void) {
let gifParseImpl = new GIFParseImpl()
gifParseImpl.parseGifs(arraybuffer, (data?: GIFFrame[], err?: BusinessError | string) => {
gifParseImpl.parseGifs(arraybuffer, (data?: GIFFrame[] | PixelMap, err?: BusinessError | string) => {
if (err) {
onError(err)
}

View File

@ -34,7 +34,7 @@ export interface gifBackData {
}
export class GIFParseImpl implements IParseGif {
parseGifs(imageinfo: ArrayBuffer, callback: (data?: GIFFrame[], err?: BusinessError | string) => void) {
parseGifs(imageinfo: ArrayBuffer, callback: (data?: GIFFrame[] | PixelMap, err?: BusinessError | string) => void) {
// 硬解码流程
let imageSource = image.createImageSource(imageinfo);
let decodeOpts: image.DecodingOptions = {
@ -44,33 +44,37 @@ export class GIFParseImpl implements IParseGif {
}
let data:GIFFrame[] = [];
imageSource.createPixelMapList(decodeOpts).then((pixelList: Array<PixelMap>) => {
//sdk的api接口发生变更从.getDelayTime() 变为.getDelayTimeList()
imageSource.getDelayTimeList().then(delayTimes => {
if (pixelList.length > 0) {
let pixelmap1 = pixelList[0];
pixelmap1.getImageInfo().then(imageInfo => {
for (let i = 0; i < pixelList.length; i++) {
let frame = new GIFFrame();
frame.drawPixelMap = pixelList[i];
frame.dims = { width: imageInfo.size.width, height: imageInfo.size.height, top: 0, left: 0 }
if (i < delayTimes.length) {
frame.delay = delayTimes[i];
} else {
frame.delay = delayTimes[delayTimes.length - 1]
}
data.push(frame)
}
callback(data,undefined)
imageSource.release();
}).catch((err: string) => {
imageSource.release();
callback(undefined,err)
})
}
}).catch((err: string) => {
imageSource.release();
callback(undefined,err)
})
if(pixelList.length == 1){
callback(pixelList[0],undefined)
}else {
//sdk的api接口发生变更从.getDelayTime() 变为.getDelayTimeList()
imageSource.getDelayTimeList().then(delayTimes => {
if (pixelList.length > 0) {
let pixelmap1 = pixelList[0];
pixelmap1.getImageInfo().then(imageInfo => {
for (let i = 0; i < pixelList.length; i++) {
let frame = new GIFFrame();
frame.drawPixelMap = pixelList[i];
frame.dims = { width: imageInfo.size.width, height: imageInfo.size.height, top: 0, left: 0 }
if (i < delayTimes.length) {
frame.delay = delayTimes[i];
} else {
frame.delay = delayTimes[delayTimes.length - 1]
}
data.push(frame)
}
callback(data,undefined)
imageSource.release();
}).catch((err: string) => {
imageSource.release();
callback(undefined,err)
})
}
}).catch((err: string) => {
imageSource.release();
callback(undefined,err)
})
}
}).catch((err: string) => {
imageSource.release();
callback(undefined,err)

View File

@ -17,5 +17,5 @@ import { GIFFrame } from './GIFFrame'
import worker from '@ohos.worker';
export interface IParseGif{
// gif解析
parseGifs:(imageinfo: ArrayBuffer, callback: (data?:GIFFrame[], err?:BusinessError|string) => void, worker?:worker.ThreadWorker,runMainThread?:boolean)=>void
parseGifs:(imageinfo: ArrayBuffer, callback: (data?:GIFFrame[] | PixelMap, err?:BusinessError|string) => void, worker?:worker.ThreadWorker,runMainThread?:boolean)=>void
}