webp单帧图片直接返回pixelMap不返回frame
Signed-off-by: 2206069183@qq.com <2206069183@qq.com>
This commit is contained in:
parent
3e4f204027
commit
88d9df0278
|
@ -8,6 +8,7 @@
|
|||
- 适配Sendable内存共享优化
|
||||
- 修改全局请求头覆盖request请求头
|
||||
- imageKnife支持heic测试demo独立页面展示
|
||||
- webp单帧图片直接返回pixelMap不返回frame
|
||||
|
||||
## 2.1.2-rc.12
|
||||
- 新增gif播放次数功能
|
||||
|
|
|
@ -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);
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue