From e6771c4a1c1365421753c9a2143ec9e3e0713216 Mon Sep 17 00:00:00 2001 From: zenggaofeng Date: Mon, 11 Dec 2023 17:08:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B7=E4=BE=8B=E7=9A=84?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=9B=BE=E7=89=87=E9=93=BE=E6=8E=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zenggaofeng --- .../ets/pages/testManyGifLoadWithPage.ets | 36 +++------------- .../pages/testManyNetImageLoadWithPage.ets | 34 +++++++++------ .../imageknife/utils/gif/GIFParseImpl.ets | 43 +------------------ 3 files changed, 29 insertions(+), 84 deletions(-) diff --git a/entry/src/main/ets/pages/testManyGifLoadWithPage.ets b/entry/src/main/ets/pages/testManyGifLoadWithPage.ets index 39d354b..11f9819 100644 --- a/entry/src/main/ets/pages/testManyGifLoadWithPage.ets +++ b/entry/src/main/ets/pages/testManyGifLoadWithPage.ets @@ -15,15 +15,15 @@ import { ImageKnife, ImageKnifeComponent, ImageKnifeGlobal, ImageKnifeOption } from "@ohos/libraryimageknife" import worker from '@ohos.worker'; -let gifUrl = "https://gw.alicdn.com/tfs/TB1E3H5t8Bh1e4jSZFhXXcC9VXa-198-198.gif" +let gifUrl = "https://gd-hbimg.huaban.com/e0a25a7cab0d7c2431978726971d61720732728a315ae-57EskW_fw658" let data: string[] = [ - 'https://media.giphy.com/media/hVgagDPf1IRFK/giphy.gif', - 'https://placehold.co/600x400/000000/FFFFFF/png', - 'https://s1.aigei.com/src/img/gif/92/922f58ca46c34b3e9947ddd4dc17ec32.gif?imageMogr2/auto-orient/thumbnail/!282x282r/gravity/Center/crop/282x282/quality/85/&e=1735488000&token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:YRYJJynbOC0Z_Nl7HunjuRr4-Vk=', - 'https://placehold.co/600x400/000000/orange/png', - 'https://s1.aigei.com/src/img/gif/6c/6c907924ef1546d3a593fae3e78b97f6.gif?imageMogr2/auto-orient/thumbnail/!282x282r/gravity/Center/crop/282x282/quality/85/&e=1735488000&token=P7S2Xpzfz11vAkASLTkfHN7Fw-oOZBecqeJaxypL:PozGIimx0mj5m69DQ0Z6qWn7mA0=', - 'https://placehold.co/600x400/000000/orange/png?text=Hello+World' + 'https://gd-hbimg.huaban.com/e0a25a7cab0d7c2431978726971d61720732728a315ae-57EskW_fw658', + 'https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB', + 'https://pic.ibaotu.com/gif/18/17/16/51u888piCtqj.gif!fwpaa70/fw/700', + 'https://img-blog.csdnimg.cn/20191215043500229.png', + 'https://res.vmallres.com/cmscdn/CN/2023-03/7052a601ac3e428c84c9415ad9734735.gif', + 'https://img-blog.csdn.net/20140514114029140' ] @Entry @@ -56,28 +56,6 @@ struct TestManyGifLoadWithPage { }.width('50%').backgroundColor(Color.Blue) } - Row() { - Column() { - Button('use Worker').align(Alignment.Center).fontSize(10).margin(2) - .onClick(() => { - this.workerOption = { - loadSrc: gifUrl, - placeholderSrc: $r('app.media.icon_loading'), - errorholderSrc: $r('app.media.icon_failed') - } - }) - ImageKnifeComponent({ imageKnifeOption: this.workerOption }) - .width('100%') - .height(100) - .backgroundColor(Color.Blue) - }.width('50%').backgroundColor(Color.Orange) - - Column() { - Button('logs').align(Alignment.Center).fontSize(10).margin(2) - Text('logs').width('100%').height(100).backgroundColor(Color.Orange) - }.width('50%').backgroundColor(Color.Blue) - } - Grid() { ForEach(data, (url: string) => { GridItem(){ diff --git a/entry/src/main/ets/pages/testManyNetImageLoadWithPage.ets b/entry/src/main/ets/pages/testManyNetImageLoadWithPage.ets index b917aec..e90357a 100644 --- a/entry/src/main/ets/pages/testManyNetImageLoadWithPage.ets +++ b/entry/src/main/ets/pages/testManyNetImageLoadWithPage.ets @@ -60,20 +60,26 @@ class CommonDataSource implements IDataSource { struct TestManyNetImageLoadWithPage { @State hotCommendList:CommonDataSource = new CommonDataSource([]) private data:Array = [ - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/11/2159934215_1248_702.jpeg', - 'http://s.yingshidq.com.cn/imags/poster/2022/08/02/165937334218556809.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/10/4350315060_640_360.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/10/3835072893_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/10/2821936016_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/11/1311714870_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/10/4421772097_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/09/05/5898334347_400_225.png', - 'http://s.yingshidq.com.cn/imags/poster/2022/12/06/167031399911862707.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/11/1405851829_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/10/3796501624_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/10/4202181519_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/11/1449894622_1248_702.jpeg', - 'http://s.yingshidq.com.cn/cover/longbms/2023/08/10/3756558151_1248_702.jpeg' + "http://e.hiphotos.baidu.com/image/pic/item/a1ec08fa513d2697e542494057fbb2fb4316d81e.jpg", + "http://c.hiphotos.baidu.com/image/pic/item/30adcbef76094b36de8a2fe5a1cc7cd98d109d99.jpg", + "http://h.hiphotos.baidu.com/image/pic/item/7c1ed21b0ef41bd5f2c2a9e953da81cb39db3d1d.jpg", + "http://g.hiphotos.baidu.com/image/pic/item/55e736d12f2eb938d5277fd5d0628535e5dd6f4a.jpg", + "http://e.hiphotos.baidu.com/image/pic/item/4e4a20a4462309f7e41f5cfe760e0cf3d6cad6ee.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/9d82d158ccbf6c81b94575cfb93eb13533fa40a2.jpg", + "http://e.hiphotos.baidu.com/image/pic/item/4bed2e738bd4b31c1badd5a685d6277f9e2ff81e.jpg", + "http://g.hiphotos.baidu.com/image/pic/item/0d338744ebf81a4c87a3add4d52a6059252da61e.jpg", + "http://a.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee5080c8142ff5e0fe99257e19.jpg", + "http://f.hiphotos.baidu.com/image/pic/item/4034970a304e251f503521f5a586c9177e3e53f9.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/279759ee3d6d55fbb3586c0168224f4a20a4dd7e.jpg", + "http://img2.xkhouse.com/bbs/hfhouse/data/attachment/forum/corebbs/2009-11/2009113011534566298.jpg", + "http://a.hiphotos.baidu.com/image/pic/item/e824b899a9014c087eb617650e7b02087af4f464.jpg", + "http://c.hiphotos.baidu.com/image/pic/item/9c16fdfaaf51f3de1e296fa390eef01f3b29795a.jpg", + "http://d.hiphotos.baidu.com/image/pic/item/b58f8c5494eef01f119945cbe2fe9925bc317d2a.jpg", + "http://h.hiphotos.baidu.com/image/pic/item/902397dda144ad340668b847d4a20cf430ad851e.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/359b033b5bb5c9ea5c0e3c23d139b6003bf3b374.jpg", + "http://a.hiphotos.baidu.com/image/pic/item/8d5494eef01f3a292d2472199d25bc315d607c7c.jpg", + "http://b.hiphotos.baidu.com/image/pic/item/e824b899a9014c08878b2c4c0e7b02087af4f4a3.jpg", + "http://g.hiphotos.baidu.com/image/pic/item/6d81800a19d8bc3e770bd00d868ba61ea9d345f2.jpg", ] aboutToAppear() { this.hotCommendList.addData(this.hotCommendList.totalCount(),this.data) diff --git a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets index 83cb55e..49fdbb2 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets @@ -35,47 +35,7 @@ export interface gifBackData { export class GIFParseImpl implements IParseGif { parseGifs(imageinfo: ArrayBuffer, callback: (data?: GIFFrame[], err?: BusinessError | string) => void) { - // taskPoolExecutePixelMapList(imageinfo,callback); - // oh解码流程 - let imageSource = image.createImageSource(imageinfo); - let decodeOpts: image.DecodingOptions = { - sampleSize: 1, - editable: true, - rotate: 0 - } - let data:GIFFrame[] = []; - imageSource.createPixelMapList(decodeOpts).then((pixelList: Array) => { - //sdk的api接口发生变更:从.getDelayTime() 变为.getDelayTimeList() - imageSource.getDelayTimeList().then(delayTimes => { - if (pixelList.length > 0) { - let pixelmap = pixelList[0]; - pixelmap.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) - }) + taskPoolExecutePixelMapList(imageinfo,callback); } } @@ -111,6 +71,7 @@ async function taskParseGif(arrayBuffer: ArrayBuffer): Promise { function taskPoolExecutePixelMapList(arrayBuffer: ArrayBuffer, callback: (data?: GIFFrame[], err?: BusinessError | string) => void) { LogUtil.log("ceshi321 : arrayBuffer长度" + arrayBuffer.byteLength) let task = new taskpool.Task(taskParseGif, arrayBuffer) + task.setTransferList([]) taskpool.execute(task).then((imageFrames: GIFFrame[]) => { // LogUtil.log('ceshi321 : Succeeded in creating pixelmap Ui .' + imageFrames.getPixelBytesNumber()) callback(imageFrames,undefined)