diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e0b603..1a7977d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - 适配Sendable内存共享优化 - 修改全局请求头覆盖request请求头 - imageKnife支持heic测试demo独立页面展示 +- webp单帧图片直接返回pixelMap不返回frame ## 2.1.2-rc.12 - 新增gif播放次数功能 diff --git a/entry/src/main/ets/pages/testImageKnifeCache.ets b/entry/src/main/ets/pages/testImageKnifeCache.ets index c1aaf57..8a787ea 100644 --- a/entry/src/main/ets/pages/testImageKnifeCache.ets +++ b/entry/src/main/ets/pages/testImageKnifeCache.ets @@ -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); }) } diff --git a/library/src/main/ets/components/imageknife/ImageKnife.ets b/library/src/main/ets/components/imageknife/ImageKnife.ets index 4e0ba52..9cd9fe4 100644 --- a/library/src/main/ets/components/imageknife/ImageKnife.ets +++ b/library/src/main/ets/components/imageknife/ImageKnife.ets @@ -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 { diff --git a/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets b/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets index a415276..adec289 100644 --- a/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets +++ b/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets @@ -536,7 +536,7 @@ export class RequestManager { private gifProcess(onComplete: (value: PixelMap | GIFFrame[]) => void | PromiseLike, 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) } diff --git a/library/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets b/library/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets index abe1a37..f75503f 100644 --- a/library/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets +++ b/library/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets @@ -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) => { - //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) diff --git a/library/src/main/ets/components/imageknife/utils/gif/IParseGif.ets b/library/src/main/ets/components/imageknife/utils/gif/IParseGif.ets index d80f388..1b11b7d 100644 --- a/library/src/main/ets/components/imageknife/utils/gif/IParseGif.ets +++ b/library/src/main/ets/components/imageknife/utils/gif/IParseGif.ets @@ -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 } \ No newline at end of file