From dbe32e7da838110a6139b10f7493810b8235dfdf Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Fri, 15 Sep 2023 16:52:43 +0800 Subject: [PATCH 01/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B9=20imageknife?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E4=B8=8B=E7=9A=84cache=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../src/main/ets/components/cache/Base64.ets | 22 +- .../main/ets/components/cache/CustomMap.ets | 4 +- .../main/ets/components/cache/FileReader.ets | 72 ---- .../main/ets/components/cache/FileUtils.ets | 49 +-- .../main/ets/components/cache/LruCache.ets | 16 +- .../src/main/ets/components/cache/Md5.ets | 392 ------------------ 6 files changed, 39 insertions(+), 516 deletions(-) delete mode 100644 imageknife/src/main/ets/components/cache/FileReader.ets delete mode 100644 imageknife/src/main/ets/components/cache/Md5.ets diff --git a/imageknife/src/main/ets/components/cache/Base64.ets b/imageknife/src/main/ets/components/cache/Base64.ets index e219975..b71b6fe 100644 --- a/imageknife/src/main/ets/components/cache/Base64.ets +++ b/imageknife/src/main/ets/components/cache/Base64.ets @@ -18,24 +18,24 @@ export class Base64 { private static sInstance: Base64; public static getInstance(): Base64{ - if (!this.sInstance) { - this.sInstance = new Base64(); + if (!Base64.sInstance) { + Base64.sInstance = new Base64(); } - return this.sInstance; + return Base64.sInstance; } private constructor() { console.log("Base64 - constructor init!") - for (var index = 0; index < this.chars.length; index++) { + for (let index = 0; index < this.chars.length; index++) { this.lookup[this.chars.charCodeAt(index)] = index; } } encode(arraybuffer: ArrayBuffer): string { let bytes = new Uint8Array(arraybuffer), - i, len = bytes.length, base64 = ''; + let i:number = 0 for (i = 0; i < len; i += 3) { base64 += this.chars[bytes[i] >> 2]; base64 += this.chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; @@ -53,12 +53,12 @@ export class Base64 { decode(base64: string): ArrayBuffer{ let bufferLength = base64.length * 0.75, len = base64.length, - i, - p = 0, - encoded1, - encoded2, - encoded3, - encoded4; + p = 0; + let i:number = 0; + let encoded1:number = 0; + let encoded2:number = 0; + let encoded3:number = 0; + let encoded4:number = 0; if (base64[base64.length - 1] === '=') { bufferLength--; diff --git a/imageknife/src/main/ets/components/cache/CustomMap.ets b/imageknife/src/main/ets/components/cache/CustomMap.ets index 7190d6b..0baca69 100644 --- a/imageknife/src/main/ets/components/cache/CustomMap.ets +++ b/imageknife/src/main/ets/components/cache/CustomMap.ets @@ -38,7 +38,7 @@ export class CustomMap { if (key == null || value == null) { throw new Error('key or value is invalid,checking the parameter'); } - var pre = this.map.get(key) + let pre = this.map.get(key) if (this.hasKey(key)) { this.map.delete(key) } @@ -70,7 +70,7 @@ export class CustomMap { return this.map.size; } // 遍历Map,执行处理函数. 回调函数 function(key,value,index){..} - each(fn) { + each(fn: (value: V, key: K, map: Map) => void) { this.map.forEach(fn) } // 清除键值对 diff --git a/imageknife/src/main/ets/components/cache/FileReader.ets b/imageknife/src/main/ets/components/cache/FileReader.ets deleted file mode 100644 index 854971d..0000000 --- a/imageknife/src/main/ets/components/cache/FileReader.ets +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import fs from '@ohos.file.fs'; - -export class FileReader { - - // 文件大小 - fileLength: number = 0 - - // 读取的长度 - length: number = 0 - - // 读写stream - stream: any = null - // 缓存buf - buf: ArrayBuffer = new ArrayBuffer(1) - - constructor(path: string) { - if (!path || Object.keys(path).length == 0) { - return - } - try { - this.stream = fs.createStreamSync(path, 'r+'); - var stat = fs.statSync(path) - this.fileLength = stat.size - } catch (e) { - } - } - - /** - * 循环读取文件数据 - */ - readLine(): string{ - var line = '' - while (this.length <= this.fileLength) { - this.stream.readSync(this.buf, { position: this.length }) - this.length++ - var temp = String.fromCharCode.apply(null, new Uint8Array(this.buf)); - line = line + temp - if (temp == '\n' || temp == '\r') { - return line - } - } - return line - } - - /** - * 判断文件是否结束 - */ - isEnd() { - return this.fileLength <= 0 || this.length == this.fileLength - } - - /** - * 关闭stream - */ - close() { - this.stream.closeSync() - } -} \ No newline at end of file diff --git a/imageknife/src/main/ets/components/cache/FileUtils.ets b/imageknife/src/main/ets/components/cache/FileUtils.ets index 49c1a49..d2cd270 100644 --- a/imageknife/src/main/ets/components/cache/FileUtils.ets +++ b/imageknife/src/main/ets/components/cache/FileUtils.ets @@ -14,20 +14,20 @@ */ import fs from '@ohos.file.fs'; - +import { BusinessError } from '@ohos.base' export class FileUtils { base64Str: string = '' private static sInstance: FileUtils; public static getInstance(): FileUtils { - if (!this.sInstance) { - this.sInstance = new FileUtils(); + if (!FileUtils.sInstance) { + FileUtils.sInstance = new FileUtils(); } - return this.sInstance; + return FileUtils.sInstance; } private constructor() { - console.error("FileUtils - FileUtils constructor") + console.log("FileUtils - FileUtils constructor") } /** @@ -50,7 +50,7 @@ export class FileUtils { fs.unlinkSync(path); } } catch (err) { - console.log("FileUtils deleteFile Method has error, err msg=" + err.message + " err code=" + err.code); + console.log("FileUtils deleteFile Method has error, err msg=" + (err as BusinessError).message + " err code=" + (err as BusinessError).code); } } /** @@ -63,11 +63,11 @@ export class FileUtils { if (fileExist) { fs.unlink(path).then(()=>{ resolve(); - }).catch(err=>{ + }).catch( (err:BusinessError)=>{ reject(err) }) } - }).catch(err=>{ + }).catch((err:BusinessError)=>{ reject(err); }) }) @@ -89,7 +89,7 @@ export class FileUtils { * 异步删除文件目录 必须保证文件夹里面没有文件 * @param path 待删除目录的绝对路径 */ - deleteFolderAsync(path: string, deleteComplete, deleteError) { + deleteFolderAsync(path: string, deleteComplete:(value: void) => void | PromiseLike, deleteError:(reason: Object) => PromiseLike) { if (this.existFolder(path)) { fs.rmdir(path) .then(deleteComplete).catch(deleteError); @@ -209,10 +209,10 @@ export class FileUtils { // 关闭文件 fs.closeSync(file); resolve(buf); - }).catch(err=>{ + }).catch((err:BusinessError)=>{ reject(err); }) - }).catch(err=>{ + }).catch((err:BusinessError)=>{ reject(err); }) @@ -235,7 +235,9 @@ export class FileUtils { let ss = fs.createStreamSync(path, "r+"); ss.readSync(buf) ss.closeSync(); - return String.fromCharCode.apply(null, new Uint8Array(buf)) + let u8:Uint8Array = new Uint8Array(buf); + let array:Array = Array.from(u8) + return String.fromCharCode(...array) } catch (e) { console.log("FileUtils - readFilePic " + e) return "" @@ -307,33 +309,18 @@ export class FileUtils { * string 转 Uint8Array * @param str 输入String */ - stringToUint8Array(str): Uint8Array { - var arr = []; - for (var i = 0, j = str.length; i < j; ++i) { + stringToUint8Array(str:string): Uint8Array { + let arr:Array = new Array(); + for (let i = 0, j = str.length; i < j; ++i) { arr.push(str.charCodeAt(i)); } - var tmpUint8Array = new Uint8Array(arr); + let tmpUint8Array = new Uint8Array(arr); return tmpUint8Array } - /** - * int 转 byte[] - * @param n 输入int - */ - intTobytes2(n) { - var bytes = []; - for (var i = 0; i < 2; i++) { - bytes[i] = n >> (8 - i * 8); - } - return bytes; - } uint8ArrayToBuffer(array: Uint8Array): ArrayBuffer { return array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset) } } - -export interface AsyncCallback { - (err: string, data: T): void; -} \ No newline at end of file diff --git a/imageknife/src/main/ets/components/cache/LruCache.ets b/imageknife/src/main/ets/components/cache/LruCache.ets index 3e8d14d..f873924 100644 --- a/imageknife/src/main/ets/components/cache/LruCache.ets +++ b/imageknife/src/main/ets/components/cache/LruCache.ets @@ -30,7 +30,7 @@ export class LruCache { if (key == null || value == null) { throw new Error('key or value is invalid '); } - var pre = this.map.get(key) + let pre = this.map.get(key) if (pre == null) { this.size++ } @@ -43,7 +43,7 @@ export class LruCache { if (key == null) { throw new Error('key is null,checking the parameter'); } - var preValue = this.map.get(key) + let preValue = this.map.get(key) if (this.map.remove(key)) { this.size-- } @@ -51,11 +51,11 @@ export class LruCache { } // 获取键为key的value - get(key: K): V { + get(key: K): V|undefined { if (key == null) { throw new Error('key is null,checking the parameter'); } - var preValue = this.map.get(key) + let preValue = this.map.get(key) if (preValue != null) { this.entryRemoved(key, preValue, preValue) } @@ -69,7 +69,7 @@ export class LruCache { * preValue 对应key键的旧value值 * value 对应key键的新value值 */ - entryRemoved(key: K, preValue: V, value: V) { + entryRemoved(key: K, preValue: V | undefined, value: V | undefined) { if (preValue != null) { this.map.remove(key) } @@ -89,7 +89,7 @@ export class LruCache { if (this.size <= tempsize || this.map.isEmpty()) { break } - var delkey = this.map.getFirstKey() + let delkey = this.map.getFirstKey() this.map.remove(delkey) this.size-- } @@ -126,13 +126,13 @@ export class LruCache { } - this.map.each(function (value, key, index) { + this.map.each( (value, key, index) => { printResult +='LruCache:key=' + key + 'value= ' + value; }) return printResult; } - foreachLruCache(fn){ + foreachLruCache(fn:(value: V, key: K, map: Map) => void){ this.map.each(fn); } diff --git a/imageknife/src/main/ets/components/cache/Md5.ets b/imageknife/src/main/ets/components/cache/Md5.ets deleted file mode 100644 index bbfb601..0000000 --- a/imageknife/src/main/ets/components/cache/Md5.ets +++ /dev/null @@ -1,392 +0,0 @@ -/* - * Copyright (C) 2021 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export class Md5 { - - // One time hashing functions - public static hashStr(str: string, raw?: false): string - - public static hashStr(str: string, raw: true): Int32Array - - public static hashStr(str: string, raw: boolean = false) { - return this.onePassHasher - .start() - .appendStr(str) - .end(raw); - } - - public static hashAsciiStr(str: string, raw?: false): string - - public static hashAsciiStr(str: string, raw: true): Int32Array - - public static hashAsciiStr(str: string, raw: boolean = false) { - return this.onePassHasher - .start() - .appendAsciiStr(str) - .end(raw); - } - - // Private Static Variables - private static stateIdentity = new Int32Array([1732584193, -271733879, -1732584194, 271733878]); - private static buffer32Identity = new Int32Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); - private static hexChars = '0123456789abcdef'; - private static hexOut: string[] = []; - - // Permanent instance is to use for one-call hashing - private static onePassHasher = new Md5(); - - private static _hex(x: any): string { - const hc = Md5.hexChars; - const ho = Md5.hexOut; - let n; - let offset; - let j; - let i; - - for (i = 0; i < 4; i += 1) { - offset = i * 8; - n = x[i]; - for (j = 0; j < 8; j += 2) { - ho[offset + 1 + j] = hc.charAt(n & 0x0F); - n >>>= 4; - ho[offset + 0 + j] = hc.charAt(n & 0x0F); - n >>>= 4; - } - } - return ho.join(''); - } - - private static _md5cycle(x: Int32Array | Uint32Array, k: Int32Array | Uint32Array) { - let a = x[0]; - let b = x[1]; - let c = x[2]; - let d = x[3]; - // ff() - a += (b & c | ~b & d) + k[0] - 680876936 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[1] - 389564586 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[2] + 606105819 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[3] - 1044525330 | 0; - b = (b << 22 | b >>> 10) + c | 0; - a += (b & c | ~b & d) + k[4] - 176418897 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[5] + 1200080426 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[6] - 1473231341 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[7] - 45705983 | 0; - b = (b << 22 | b >>> 10) + c | 0; - a += (b & c | ~b & d) + k[8] + 1770035416 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[9] - 1958414417 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[10] - 42063 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[11] - 1990404162 | 0; - b = (b << 22 | b >>> 10) + c | 0; - a += (b & c | ~b & d) + k[12] + 1804603682 | 0; - a = (a << 7 | a >>> 25) + b | 0; - d += (a & b | ~a & c) + k[13] - 40341101 | 0; - d = (d << 12 | d >>> 20) + a | 0; - c += (d & a | ~d & b) + k[14] - 1502002290 | 0; - c = (c << 17 | c >>> 15) + d | 0; - b += (c & d | ~c & a) + k[15] + 1236535329 | 0; - b = (b << 22 | b >>> 10) + c | 0; - // gg() - a += (b & d | c & ~d) + k[1] - 165796510 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[6] - 1069501632 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[11] + 643717713 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[0] - 373897302 | 0; - b = (b << 20 | b >>> 12) + c | 0; - a += (b & d | c & ~d) + k[5] - 701558691 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[10] + 38016083 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[15] - 660478335 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[4] - 405537848 | 0; - b = (b << 20 | b >>> 12) + c | 0; - a += (b & d | c & ~d) + k[9] + 568446438 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[14] - 1019803690 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[3] - 187363961 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[8] + 1163531501 | 0; - b = (b << 20 | b >>> 12) + c | 0; - a += (b & d | c & ~d) + k[13] - 1444681467 | 0; - a = (a << 5 | a >>> 27) + b | 0; - d += (a & c | b & ~c) + k[2] - 51403784 | 0; - d = (d << 9 | d >>> 23) + a | 0; - c += (d & b | a & ~b) + k[7] + 1735328473 | 0; - c = (c << 14 | c >>> 18) + d | 0; - b += (c & a | d & ~a) + k[12] - 1926607734 | 0; - b = (b << 20 | b >>> 12) + c | 0; - // hh() - a += (b ^ c ^ d) + k[5] - 378558 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[8] - 2022574463 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[11] + 1839030562 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[14] - 35309556 | 0; - b = (b << 23 | b >>> 9) + c | 0; - a += (b ^ c ^ d) + k[1] - 1530992060 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[4] + 1272893353 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[7] - 155497632 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[10] - 1094730640 | 0; - b = (b << 23 | b >>> 9) + c | 0; - a += (b ^ c ^ d) + k[13] + 681279174 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[0] - 358537222 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[3] - 722521979 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[6] + 76029189 | 0; - b = (b << 23 | b >>> 9) + c | 0; - a += (b ^ c ^ d) + k[9] - 640364487 | 0; - a = (a << 4 | a >>> 28) + b | 0; - d += (a ^ b ^ c) + k[12] - 421815835 | 0; - d = (d << 11 | d >>> 21) + a | 0; - c += (d ^ a ^ b) + k[15] + 530742520 | 0; - c = (c << 16 | c >>> 16) + d | 0; - b += (c ^ d ^ a) + k[2] - 995338651 | 0; - b = (b << 23 | b >>> 9) + c | 0; - // ii() - a += (c ^ (b | ~d)) + k[0] - 198630844 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[5] - 57434055 | 0; - b = (b << 21 | b >>> 11) + c | 0; - a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[10] - 1051523 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0; - b = (b << 21 | b >>> 11) + c | 0; - a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[15] - 30611744 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0; - b = (b << 21 | b >>> 11) + c | 0; - a += (c ^ (b | ~d)) + k[4] - 145523070 | 0; - a = (a << 6 | a >>> 26) + b | 0; - d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0; - d = (d << 10 | d >>> 22) + a | 0; - c += (a ^ (d | ~b)) + k[2] + 718787259 | 0; - c = (c << 15 | c >>> 17) + d | 0; - b += (d ^ (c | ~a)) + k[9] - 343485551 | 0; - b = (b << 21 | b >>> 11) + c | 0; - - x[0] = a + x[0] | 0; - x[1] = b + x[1] | 0; - x[2] = c + x[2] | 0; - x[3] = d + x[3] | 0; - } - - private _dataLength: number; - private _bufferLength: number; - private _state: Int32Array = new Int32Array(4); - private _buffer: ArrayBuffer = new ArrayBuffer(68); - private _buffer8: Uint8Array; - private _buffer32: Uint32Array; - - constructor() { - this._buffer8 = new Uint8Array(this._buffer, 0, 68); - this._buffer32 = new Uint32Array(this._buffer, 0, 17); - this.start(); - } - - public start() { - this._dataLength = 0; - this._bufferLength = 0; - this._state.set(Md5.stateIdentity); - return this; - } - - // Char to code point to to array conversion: - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt - // #Example.3A_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown - public appendStr(str: string) { - const buf8 = this._buffer8; - const buf32 = this._buffer32; - let bufLen = this._bufferLength; - let code; - let i; - - for (i = 0; i < str.length; i += 1) { - code = str.charCodeAt(i); - if (code < 128) { - buf8[bufLen++] = code; - } else if (code < 0x800) { - buf8[bufLen++] = (code >>> 6) + 0xC0; - buf8[bufLen++] = code & 0x3F | 0x80; - } else if (code < 0xD800 || code > 0xDBFF) { - buf8[bufLen++] = (code >>> 12) + 0xE0; - buf8[bufLen++] = (code >>> 6 & 0x3F) | 0x80; - buf8[bufLen++] = (code & 0x3F) | 0x80; - } else { - code = ((code - 0xD800) * 0x400) + (str.charCodeAt(++i) - 0xDC00) + 0x10000; - if (code > 0x10FFFF) { - throw new Error('Unicode standard supports code points up to U+10FFFF'); - } - buf8[bufLen++] = (code >>> 18) + 0xF0; - buf8[bufLen++] = (code >>> 12 & 0x3F) | 0x80; - buf8[bufLen++] = (code >>> 6 & 0x3F) | 0x80; - buf8[bufLen++] = (code & 0x3F) | 0x80; - } - if (bufLen >= 64) { - this._dataLength += 64; - Md5._md5cycle(this._state, buf32); - bufLen -= 64; - buf32[0] = buf32[16]; - } - } - this._bufferLength = bufLen; - return this; - } - - public appendAsciiStr(str: string) { - const buf8 = this._buffer8; - const buf32 = this._buffer32; - let bufLen = this._bufferLength; - let i; - let j = 0; - - for (;; ) { - i = Math.min(str.length - j, 64 - bufLen); - while (i--) { - buf8[bufLen++] = str.charCodeAt(j++); - } - if (bufLen < 64) { - break; - } - this._dataLength += 64; - Md5._md5cycle(this._state, buf32); - bufLen = 0; - } - this._bufferLength = bufLen; - return this; - } - - public appendByteArray(input: Uint8Array) { - const buf8 = this._buffer8; - const buf32 = this._buffer32; - let bufLen = this._bufferLength; - let i; - let j = 0; - - for (;; ) { - i = Math.min(input.length - j, 64 - bufLen); - while (i--) { - buf8[bufLen++] = input[j++]; - } - if (bufLen < 64) { - break; - } - this._dataLength += 64; - Md5._md5cycle(this._state, buf32); - bufLen = 0; - } - this._bufferLength = bufLen; - return this; - } - - public getState() { - const self = this; - const s = self._state; - - return { - buffer: String.fromCharCode.apply(null, self._buffer8), - buflen: self._bufferLength, - length: self._dataLength, - state: [s[0], s[1], s[2], s[3]] - }; - } - - public setState(state: any) { - const buf = state.buffer; - const x = state.state; - const s = this._state; - let i; - - this._dataLength = state.length; - this._bufferLength = state.buflen; - s[0] = x[0]; - s[1] = x[1]; - s[2] = x[2]; - s[3] = x[3]; - - for (i = 0; i < buf.length; i += 1) { - this._buffer8[i] = buf.charCodeAt(i); - } - } - - public end(raw: boolean = false) { - const bufLen = this._bufferLength; - const buf8 = this._buffer8; - const buf32 = this._buffer32; - const i = (bufLen >> 2) + 1; - let dataBitsLen; - - this._dataLength += bufLen; - - buf8[bufLen] = 0x80; - buf8[bufLen + 1] = buf8[bufLen + 2] = buf8[bufLen + 3] = 0; - buf32.set(Md5.buffer32Identity.subarray(i), i); - - if (bufLen > 55) { - Md5._md5cycle(this._state, buf32); - buf32.set(Md5.buffer32Identity); - } - - // Do the final computation based on the tail and length - // Beware that the final length may not fit in 32 bits so we take care of that - dataBitsLen = this._dataLength * 8; - if (dataBitsLen <= 0xFFFFFFFF) { - buf32[14] = dataBitsLen; - } else { - const matches = dataBitsLen.toString(16).match(/(.*?)(.{0,8})$/); - if (matches === null) { - return; - } - - const lo = parseInt(matches[2], 16); - const hi = parseInt(matches[1], 16) || 0; - - buf32[14] = lo; - buf32[15] = hi; - } - - Md5._md5cycle(this._state, buf32); - - return raw ? this._state : Md5._hex(this._state); - } -} \ No newline at end of file From 6717f0667c37a829cff9afca7f6b86f62b5aea95 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Fri, 15 Sep 2023 17:38:24 +0800 Subject: [PATCH 02/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B92=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9=E9=83=A8=E5=88=86imageknife=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../imageknife/ImageKnifeComponent.ets | 23 +++--- .../imageknife/ImageKnifeGlobal.ets | 75 +++++++++++++++++++ .../components/imageknife/RequestOption.ets | 14 ++-- .../imageknife/compress/CompressBuilder.ets | 4 +- .../compress/provider/CompressAdapter.ets | 6 +- .../imageknife/interface/AsyncCallback.ets | 2 +- .../imageknife/interface/AsyncSuccess.ets | 2 +- 7 files changed, 101 insertions(+), 25 deletions(-) create mode 100644 imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets index 7783aff..5966051 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets @@ -163,10 +163,11 @@ export struct ImageKnifeComponent { configNecessary(request: RequestOption) { request.load(this.imageKnifeOption.loadSrc) - .addListener((err, data) => { + .addListener({ callback: (err, data) => { LogUtil.log('ImageKnifeComponent request.load callback') this.runNextFunction(this.displayMainSource.bind(this, data)); return false; + } }) let realSize = { @@ -196,23 +197,23 @@ export struct ImageKnifeComponent { configDisplay(request: RequestOption) { if (this.imageKnifeOption.placeholderSrc) { - request.placeholder(this.imageKnifeOption.placeholderSrc, (data) => { + request.placeholder(this.imageKnifeOption.placeholderSrc, {asyncSuccess:(data) => { LogUtil.log('ImageKnifeComponent request.placeholder callback') this.runNextFunction(this.displayPlaceholder.bind(this, data)) - + } }) } if (this.imageKnifeOption.thumbSizeMultiplier) { - request.thumbnail(this.imageKnifeOption.thumbSizeMultiplier, (data) => { + request.thumbnail(this.imageKnifeOption.thumbSizeMultiplier, {asyncSuccess:(data) => { LogUtil.log('ImageKnifeComponent request.thumbnail callback') this.runNextFunction(this.displayThumbSizeMultiplier.bind(this, data)) - }, this.imageKnifeOption.thumbSizeDelay) + }}, this.imageKnifeOption.thumbSizeDelay) } if (this.imageKnifeOption.errorholderSrc) { - request.errorholder(this.imageKnifeOption.errorholderSrc, (data) => { + request.errorholder(this.imageKnifeOption.errorholderSrc, {asyncSuccess:(data) => { LogUtil.log('ImageKnifeComponent request.errorholder callback') this.runNextFunction(this.displayErrorholder.bind(this, data)) - }) + }}) } if (this.imageKnifeOption.transform) { @@ -230,19 +231,19 @@ export struct ImageKnifeComponent { if (this.imageKnifeOption.displayProgress) { - request.addProgressListener((percentValue: number) => { + request.addProgressListener({asyncSuccess:(percentValue: number) => { // 如果进度条百分比 未展示大小,展示其动画 LogUtil.log('ImageKnifeComponent request.addProgressListener callback') this.runNextFunction(this.displayProgress.bind(this, percentValue)) - }) + }}) } if (this.imageKnifeOption.retryholderSrc) { - request.retryholder(this.imageKnifeOption.retryholderSrc, (data) => { + request.retryholder(this.imageKnifeOption.retryholderSrc,{asyncSuccess: (data) => { LogUtil.log('ImageKnifeComponent request.retryholder callback') this.hasDisplayRetryholder = true this.runNextFunction(this.displayRetryholder.bind(this, data)) - }) + }}) } } diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets new file mode 100644 index 0000000..5b20d3f --- /dev/null +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ImageKnife } from './ImageKnife'; +import { LogUtil } from './utils/LogUtil'; +export enum GlobalEnum{ + // 主hap的context对象key + HAP_CONTEXT_KEY = 'HAP_CONTEXT_KEY', + // ImageKnife的对象key + IMAGE_KNIFE_KEY = 'IMAGE_KNIFE_KEY' +} + +// 构造单例对象 +export class ImageKnifeGlobal { + private constructor() {} + private static instance: ImageKnifeGlobal; + private _objects = new Map(); + + + public static getContext(): ImageKnifeGlobal { + if (!ImageKnifeGlobal.instance) { + ImageKnifeGlobal.instance = new ImageKnifeGlobal(); + } + return ImageKnifeGlobal.instance; + } + + getObject(value: string): Object | undefined { + return this._objects.get(value); + } + + setObject(key: string, objectClass: Object): void { + this._objects.set(key, objectClass); + } + + getImageKnife():ImageKnife | undefined{ + let imageKnifeObj:Object | undefined = this._objects.get(GlobalEnum.IMAGE_KNIFE_KEY); + if(imageKnifeObj == undefined){ + LogUtil.error('ImageKnifeGlobal imageKnifeObj is undefined, you need to initialize before using') + return undefined + }else{ + return (imageKnifeObj as ImageKnife) + } + } + + setImageKnife(imageKnife:ImageKnife):void{ + this._objects.set(GlobalEnum.IMAGE_KNIFE_KEY, imageKnife); + } + + getHapContext():Object | undefined{ + let hapContext:Object | undefined = this._objects.get(GlobalEnum.HAP_CONTEXT_KEY); + if(hapContext == undefined){ + LogUtil.error('ImageKnifeGlobal hapContext is undefined, you need to initialize before using') + return undefined + }else{ + return hapContext + } + } + + setHapContext(hapContext:Record):void{ + this._objects.set(GlobalEnum.HAP_CONTEXT_KEY, hapContext); + } + + +} \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/RequestOption.ets b/imageknife/src/main/ets/components/imageknife/RequestOption.ets index d130631..05c44d9 100644 --- a/imageknife/src/main/ets/components/imageknife/RequestOption.ets +++ b/imageknife/src/main/ets/components/imageknife/RequestOption.ets @@ -374,7 +374,7 @@ export class RequestOption { LogUtil.log("Main Image is Ready:" + this.loadMainReady); if (!this.loadMainReady && !(this.loadErrorReady || this.loadRetryReady) && !this.loadThumbnailReady) { // 主图未加载成功,并且未加载失败 显示占位图 主图加载成功或者加载失败后=>不展示占位图 - this.placeholderFunc(imageKnifeData) + this.placeholderFunc.asyncSuccess(imageKnifeData) } } @@ -388,7 +388,7 @@ export class RequestOption { thumbholderOnComplete(imageKnifeData: ImageKnifeData) { if (!this.loadMainReady && !(this.loadErrorReady || this.loadRetryReady)) { //主图未加载成功,并且未加载失败 显示占位图 主图加载成功或者加载失败后=>不展示占位图 - this.thumbHolderFunc(imageKnifeData) + this.thumbHolderFunc.asyncSuccess(imageKnifeData) } } @@ -402,7 +402,7 @@ export class RequestOption { // 如果有错误占位图 先解析并保存在RequestOption中 等到加载失败时候进行调用 this.errorholderData = imageKnifeData; if (this.loadErrorReady) { - this.errorholderFunc(imageKnifeData) + this.errorholderFunc.asyncSuccess(imageKnifeData) } } @@ -414,7 +414,7 @@ export class RequestOption { retryholderOnComplete(imageKnifeData: ImageKnifeData) { this.retryholderData = imageKnifeData; if (this.loadRetryReady) { - this.retryholderFunc(imageKnifeData) + this.retryholderFunc.asyncSuccess(imageKnifeData) } } @@ -426,7 +426,7 @@ export class RequestOption { this.loadMainReady = true; // 三级缓存数据加载成功 for (let requestListener of this.requestListeners) { - var ret = requestListener("", imageKnifeData); + var ret = requestListener.callback("", imageKnifeData); if (ret) { break; } @@ -455,13 +455,13 @@ export class RequestOption { // 重试图层优先于加载失败展示 this.loadRetryReady = true; if (this.retryholderData != null) { - this.retryholderFunc(this.retryholderData) + this.retryholderFunc.asyncSuccess(this.retryholderData) } } else { // 失败图层标记,如果已经有数据直接展示失败图层 this.loadErrorReady = true; if (this.errorholderData != null) { - this.errorholderFunc(this.errorholderData) + this.errorholderFunc.asyncSuccess(this.errorholderData) } } // 加载失败之后 diff --git a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets index 7f4ea19..0631338 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets @@ -54,14 +54,14 @@ export class CompressBuilder { public setTargetDir(targetDir: string): CompressBuilder { this._mTargetDir = targetDir; if (this._mTargetDir) { - var timestamp = (new Date()).valueOf(); + let timestamp = (new Date()).valueOf(); this._outFilePath = this._mTargetDir + "/" + timestamp + (Math.random() * 100).toFixed(0) + ".jpg"; } return this; } public load(list: Array): CompressBuilder { - for (var i = 0; i < list.length; i++) { + for (let i = 0; i < list.length; i++) { let element = list[i]; if (typeof element === "string") { this.loadString(element); diff --git a/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets b/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets index ff7a7e9..7de64b6 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets @@ -17,8 +17,8 @@ import {CompressProvider} from "../provider/CompressProvider" import {CompressDataListener} from "../listener/CompressDataListener" export abstract class CompressAdapter implements CompressProvider { - mData: ArrayBuffer; - mPath: string; + mData: ArrayBuffer = new ArrayBuffer(0); + mPath: string = ''; close() { } @@ -37,7 +37,7 @@ export abstract class CompressAdapter implements CompressProvider { abstract getPixelMapFormat(): PixelMapFormat; - getFormat(s: string): PixelMapFormat{ + getFormat(s: string): PixelMapFormat | undefined{ if (!s) { return undefined; } diff --git a/imageknife/src/main/ets/components/imageknife/interface/AsyncCallback.ets b/imageknife/src/main/ets/components/imageknife/interface/AsyncCallback.ets index 0097fc0..be30df4 100644 --- a/imageknife/src/main/ets/components/imageknife/interface/AsyncCallback.ets +++ b/imageknife/src/main/ets/components/imageknife/interface/AsyncCallback.ets @@ -14,5 +14,5 @@ */ export interface AsyncCallback { - (err: string, data: T): boolean; + callback:(err: string, data: T)=>boolean; } diff --git a/imageknife/src/main/ets/components/imageknife/interface/AsyncSuccess.ets b/imageknife/src/main/ets/components/imageknife/interface/AsyncSuccess.ets index 816e3d4..3bb8d34 100644 --- a/imageknife/src/main/ets/components/imageknife/interface/AsyncSuccess.ets +++ b/imageknife/src/main/ets/components/imageknife/interface/AsyncSuccess.ets @@ -14,5 +14,5 @@ */ export interface AsyncSuccess { - (data: T); + asyncSuccess:(data: T)=>void; } From 803f4934ae93af79ad1ac9a3ecc6fa59087136d8 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 18 Sep 2023 14:33:36 +0800 Subject: [PATCH 03/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B93=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9EImageKnifeGlobal=E7=B1=BB=E5=9E=8B=EF=BC=8C=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2GlobalThis=EF=BC=8C=E8=AE=BE=E8=AE=A1=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=E6=96=87=E4=BB=B6=E6=AF=94=E8=BE=83=E5=A4=9A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../src/main/ets/entryability/EntryAbility.ts | 10 ++-- .../main/ets/pages/basicTestFileIOPage.ets | 10 ++-- .../main/ets/pages/basicTestMediaImage.ets | 16 +++++-- .../pages/basicTestResourceManagerPage.ets | 9 ++-- entry/src/main/ets/pages/compressPage.ets | 5 +- entry/src/main/ets/pages/cropImagePage2.ets | 4 +- entry/src/main/ets/pages/gifTestCasePage.ets | 12 +++-- entry/src/main/ets/pages/index.ets | 3 +- .../src/main/ets/pages/manyPhotoShowPage.ets | 3 +- entry/src/main/ets/pages/pngjTestCasePage.ets | 38 ++++++++------- entry/src/main/ets/pages/svgTestCasePage.ets | 7 ++- entry/src/main/ets/pages/tempUrlTestPage.ets | 3 +- .../main/ets/pages/testAllCacheInfoPage.ets | 3 +- .../main/ets/pages/testGifDontAnimatePage.ets | 3 +- .../ets/pages/testGifLoadWithWorkerPage.ets | 6 +-- .../pages/testImageKnifeOptionChangedPage.ets | 3 +- .../testImageKnifeOptionChangedPage3.ets | 3 +- .../testImageKnifeOptionChangedPage4.ets | 5 +- .../testImageKnifeOptionChangedPage5.ets | 3 +- entry/src/main/ets/pages/testPreloadPage.ets | 31 ++++++------ .../main/ets/pages/transformPixelMapPage.ets | 4 +- entry/src/ohosTest/ets/test/Ability.test.ets | 10 ++-- .../src/ohosTest/ets/test/imageknife.test.ets | 24 +++++----- entry/src/ohosTest/ets/test/logutil.test.ets | 12 ++--- entry/src/ohosTest/ets/test/lrucache.test.ets | 26 +++++----- .../ohosTest/ets/test/requestoption.test.ets | 18 +++---- .../src/ohosTest/ets/test/transfrom.test.ets | 48 +++++++++---------- .../ohosTest/ets/testability/TestAbility.ets | 4 +- imageknife/index.ets | 1 + .../ets/components/imageknife/ImageKnife.ets | 35 ++++++++------ .../imageknife/ImageKnifeComponent.ets | 15 +++--- .../imageknife/ImageKnifeGlobal.ets | 2 +- .../components/imageknife/RequestOption.ets | 9 ++-- .../imageknife/compress/CompressBuilder.ets | 5 +- .../compress/provider/RecourseProvider.ets | 6 ++- .../networkmanage/DownloadClient.ets | 8 +++- .../networkmanage/NetworkDownloadClient.ets | 5 +- .../resourcemanage/ParseResClient.ets | 5 +- .../resourcemanage/ParseResClientBase64.ets | 5 +- .../transform/MaskTransformation.ets | 4 +- .../imageknife/utils/ColorUtils.ets | 4 +- .../imageknife/utils/gif/GIFParseImpl.ets | 3 +- 42 files changed, 244 insertions(+), 186 deletions(-) diff --git a/entry/src/main/ets/entryability/EntryAbility.ts b/entry/src/main/ets/entryability/EntryAbility.ts index af3922b..23b1c61 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ts +++ b/entry/src/main/ets/entryability/EntryAbility.ts @@ -15,7 +15,7 @@ import UIAbility from '@ohos.app.ability.UIAbility'; import hilog from '@ohos.hilog'; import window from '@ohos.window'; -import { ImageKnife,ImageKnifeDrawFactory,LogUtil } from '@ohos/imageknife' +import { ImageKnifeGlobal,ImageKnife,ImageKnifeDrawFactory,LogUtil } from '@ohos/imageknife' import { CustomEngineKeyImpl } from './CustomEngineKeyImpl' import abilityAccessCtrl,{Permissions} from '@ohos.abilityAccessCtrl'; @@ -44,12 +44,12 @@ export default class EntryAbility extends UIAbility { } hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); }); - - globalThis.ImageKnife = ImageKnife.with(this.context); + this.context.resourceManager + ImageKnife.with(this.context); // 全局配置网络加载进度条 - globalThis.ImageKnife.setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5)) + ImageKnifeGlobal.getInstance().getImageKnife().setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5)) // 全局配置缓存key - globalThis.ImageKnife.setEngineKeyImpl(new CustomEngineKeyImpl()) + ImageKnifeGlobal.getInstance().getImageKnife().setEngineKeyImpl(new CustomEngineKeyImpl()) //开启ImageKnife所有级别日志开关 LogUtil.mLogLevel = LogUtil.ALL } diff --git a/entry/src/main/ets/pages/basicTestFileIOPage.ets b/entry/src/main/ets/pages/basicTestFileIOPage.ets index 3f19ef8..d4a0019 100644 --- a/entry/src/main/ets/pages/basicTestFileIOPage.ets +++ b/entry/src/main/ets/pages/basicTestFileIOPage.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { FileUtils } from '@ohos/imageknife' +import { FileUtils, ImageKnifeGlobal} from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; @Entry @@ -41,7 +41,7 @@ struct basicTestFileIOPage { .margin({ top: 10 }) .onClick(() => { - let data = globalThis.ImageKnife.getImageKnifeContext().filesDir; + let data:string = (ImageKnifeGlobal.getInstance().getHapContext as Record).filesDir as string; console.log('ImageKnife filesPath = ' + data) this.filePath = data this.appFilePath = data; @@ -51,7 +51,7 @@ struct basicTestFileIOPage { .margin({ top: 10 }) .onClick(() => { - let data = globalThis.ImageKnife.getImageKnifeContext().cacheDir; + let data:string = (ImageKnifeGlobal.getInstance().getHapContext as Record).cacheDir as string; console.log('ImageKnife cachesPath = ' + data) this.filePath = data this.appFilePath = data; @@ -79,8 +79,8 @@ struct basicTestFileIOPage { this.appFilePath = 'appFilePath未取到值,请按顺序从上往下,从左往右依次测试' return } - globalThis.ImageKnife.getImageKnifeContext().resourceManager - .getMedia($r('app.media.gifSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.gifSample').id) .then(data => { console.log('result.getMedia') console.log('basicTestFileIOPage - 本地加载资源 解析后数据data length= ' + data.byteLength) diff --git a/entry/src/main/ets/pages/basicTestMediaImage.ets b/entry/src/main/ets/pages/basicTestMediaImage.ets index c5400ec..f009c2f 100644 --- a/entry/src/main/ets/pages/basicTestMediaImage.ets +++ b/entry/src/main/ets/pages/basicTestMediaImage.ets @@ -18,6 +18,7 @@ import { FileTypeUtil } from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; import { Base64 } from '@ohos/imageknife' import { ParseImageUtil } from '@ohos/imageknife' +import { ImageKnifeGlobal } from '@ohos/imageknife' @Entry @Component @@ -30,7 +31,8 @@ struct BasicTestMediaImage { Flex({ direction: FlexDirection.Row }) { Button('本地资源jpg') .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.jpgSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.jpgSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); let parseImageUtil = new ParseImageUtil(); @@ -45,7 +47,8 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源png') .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.pngSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.pngSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); let parseImageUtil = new ParseImageUtil(); @@ -60,7 +63,8 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源bmp') .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.bmpSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.bmpSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); let parseImageUtil = new ParseImageUtil(); @@ -75,7 +79,8 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源webp') .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.jpgSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.jpgSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); let parseImageUtil = new ParseImageUtil(); @@ -90,7 +95,8 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源gif') .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.gifSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.gifSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); let parseImageUtil = new ParseImageUtil(); diff --git a/entry/src/main/ets/pages/basicTestResourceManagerPage.ets b/entry/src/main/ets/pages/basicTestResourceManagerPage.ets index ce86ac9..f52af78 100644 --- a/entry/src/main/ets/pages/basicTestResourceManagerPage.ets +++ b/entry/src/main/ets/pages/basicTestResourceManagerPage.ets @@ -17,6 +17,7 @@ import {FileUtils} from '@ohos/imageknife' import {FileTypeUtil} from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; import {Base64} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' @Entry @Component @@ -31,8 +32,9 @@ struct BasicTestResourceManagerPage { Button('getMedia解析一张jpg图片') .margin({ top: 10 }) .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.jpgSample') - .id,) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.jpgSample') + .id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data = ' + data) let arrayBuffer = this.typedArrayToBuffer(data); @@ -47,7 +49,8 @@ struct BasicTestResourceManagerPage { Button('getMediaBase64解析一张png图片') .margin({ top: 10 }) .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMediaBase64($r('app.media.pngSample') + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContentBase64($r('app.media.pngSample') .id) .then(data => { console.log('ParseResClientBase64 - 本地加载资源 解析后数据data') diff --git a/entry/src/main/ets/pages/compressPage.ets b/entry/src/main/ets/pages/compressPage.ets index 00e6d97..e9db808 100644 --- a/entry/src/main/ets/pages/compressPage.ets +++ b/entry/src/main/ets/pages/compressPage.ets @@ -15,6 +15,7 @@ import {ImageKnife} from '@ohos/imageknife' import {OnRenameListener} from '@ohos/imageknife' import {OnCompressListener} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' @Entry @Component @@ -94,7 +95,7 @@ struct CompressPage { data.push($r('app.media.jpgSample')) console.info("asasd start compress") - globalThis.ImageKnife + (ImageKnifeGlobal.getInstance().getImageKnife()) .compressBuilder() .load(data) .ignoreBy(100) @@ -135,7 +136,7 @@ struct CompressPage { } console.info("asasd start compress") - globalThis.ImageKnife + (ImageKnifeGlobal.getInstance().getImageKnife()) .compressBuilder() .load(data) .ignoreBy(100) diff --git a/entry/src/main/ets/pages/cropImagePage2.ets b/entry/src/main/ets/pages/cropImagePage2.ets index a273999..c65273b 100644 --- a/entry/src/main/ets/pages/cropImagePage2.ets +++ b/entry/src/main/ets/pages/cropImagePage2.ets @@ -20,6 +20,7 @@ import { RecourseProvider } from '@ohos/imageknife' import { PixelMapCrop } from '@ohos/imageknife' import { CropCallback } from '@ohos/imageknife' import { FileUtils } from '@ohos/imageknife' +import { ImageKnifeGlobal } from '@ohos/imageknife' @@ -41,7 +42,8 @@ export struct CropImagePage2 { Column() { Button('点击解析图片') .onClick(() => { - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.bmpSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.bmpSample').id) .then(data => { let arrayBuffer = FileUtils.getInstance().uint8ArrayToBuffer(data); let optionx = new PixelMapCrop.Options(); diff --git a/entry/src/main/ets/pages/gifTestCasePage.ets b/entry/src/main/ets/pages/gifTestCasePage.ets index 04cf4cc..854f394 100644 --- a/entry/src/main/ets/pages/gifTestCasePage.ets +++ b/entry/src/main/ets/pages/gifTestCasePage.ets @@ -13,6 +13,7 @@ * limitations under the License. */ import {GIFParseImpl} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; @Entry @@ -28,7 +29,8 @@ struct gifTestCasePage { Flex({direction:FlexDirection.Row}){ Button("加载gif图片") .onClick(()=>{ - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.test').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.test').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data length= ' + data.byteLength) let gifImpl = new GIFParseImpl(); @@ -49,7 +51,8 @@ struct gifTestCasePage { }).margin({left:5}).backgroundColor(Color.Blue) Button("加载gif图片自带worker") .onClick(()=>{ - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.gifSample_single_frame').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.gifSample_single_frame').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data length = ' + data.byteLength) let local_worker = new worker.ThreadWorker('entry/ets/workers/GifLoadWorker.ts', { @@ -74,7 +77,8 @@ struct gifTestCasePage { }).margin({left:5}).backgroundColor(Color.Blue) Button("加载gif图片全局配置worker") .onClick(()=>{ - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.test').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.test').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data length = ' + data.byteLength) @@ -116,7 +120,7 @@ struct gifTestCasePage { type: 'classic', name: 'ImageKnifeParseGIF' }) - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/index.ets b/entry/src/main/ets/pages/index.ets index e147837..12466d3 100644 --- a/entry/src/main/ets/pages/index.ets +++ b/entry/src/main/ets/pages/index.ets @@ -16,6 +16,7 @@ import router from '@system.router'; import { ImageKnifeComponent, ImageKnifeOption, + ImageKnifeGlobal, } from '@ohos/imageknife' import worker from '@ohos.worker'; @@ -91,7 +92,7 @@ struct IndexFunctionDemo { name: 'ImageKnifeParseGIF' }) // gif解析在子线程,请在页面构建后创建worker,注入imageknife - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/manyPhotoShowPage.ets b/entry/src/main/ets/pages/manyPhotoShowPage.ets index 0e86795..a3f4218 100644 --- a/entry/src/main/ets/pages/manyPhotoShowPage.ets +++ b/entry/src/main/ets/pages/manyPhotoShowPage.ets @@ -14,6 +14,7 @@ */ import {ImageKnifeComponent, ScaleType} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import {Material} from './model/Material' import {TestDataSource} from './model/TestDataSource' @@ -32,7 +33,7 @@ struct ManyPhotoShowPage { Button('设置磁盘存储为50M') .onClick(()=>{ - let disk:DiskLruCache = globalThis.ImageKnife.getDiskMemoryCache(); + let disk:DiskLruCache = (ImageKnifeGlobal.getInstance().getImageKnife()).getDiskMemoryCache(); disk.setMaxSize(50*1024*1024) Prompt.showToast({message:"设置成功"}) diff --git a/entry/src/main/ets/pages/pngjTestCasePage.ets b/entry/src/main/ets/pages/pngjTestCasePage.ets index d67de8d..5ebbd07 100644 --- a/entry/src/main/ets/pages/pngjTestCasePage.ets +++ b/entry/src/main/ets/pages/pngjTestCasePage.ets @@ -15,7 +15,7 @@ import router from '@system.router'; import { Pngj } from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; -import { FileUtils } from '@ohos/imageknife' +import { FileUtils,ImageKnifeGlobal } from '@ohos/imageknife' import featureability from '@ohos.ability.featureAbility' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; @@ -52,10 +52,10 @@ struct PngjTestCasePage { Button(this.hint7).fontSize(30) .onClick(() => { - this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir; - globalThis.ImageKnife.getImageKnifeContext() - .resourceManager - .getMedia($r('app.media.pngSample').id) + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + .resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.pngSample').id) .then(data => { this.pngSource1 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint7 = '获取buffer成功,可以测试' @@ -91,10 +91,14 @@ struct PngjTestCasePage { Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Button(this.hint8).fontSize(30) .onClick(() => { - this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir; - globalThis.ImageKnife.getImageKnifeContext() - .resourceManager - .getMedia($r('app.media.pngSample').id) + + + + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + .resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.pngSample').id) + .then(data => { this.pngSource2 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint8 = '获取buffer成功,可以测试' @@ -136,10 +140,10 @@ struct PngjTestCasePage { Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Button(this.hint9).fontSize(30) .onClick(() => { - this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir; - globalThis.ImageKnife.getImageKnifeContext() - .resourceManager - .getMedia($r('app.media.pngSample').id) + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + .resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.pngSample').id) .then(data => { this.pngSource3 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint9 = '获取buffer成功,可以测试' @@ -186,10 +190,10 @@ struct PngjTestCasePage { Button(this.hint10).fontSize(30) .onClick(() => { - this.rootFolder = globalThis.ImageKnife.getImageKnifeContext().filesDir; - globalThis.ImageKnife.getImageKnifeContext() - .resourceManager - .getMedia($r('app.media.pngSample').id) + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext as Record).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + .resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.pngSample').id) .then(data => { this.pngSource4 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint10 = '获取buffer成功,可以测试' diff --git a/entry/src/main/ets/pages/svgTestCasePage.ets b/entry/src/main/ets/pages/svgTestCasePage.ets index 4c3516c..fab08f2 100644 --- a/entry/src/main/ets/pages/svgTestCasePage.ets +++ b/entry/src/main/ets/pages/svgTestCasePage.ets @@ -13,6 +13,7 @@ * limitations under the License. */ import {SVGParseImpl} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' @Entry @Component @@ -28,7 +29,8 @@ struct svgTestCasePage { Button("加载SVG图片") .onClick(()=>{ - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.svgSample').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.svgSample').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data = ' + data) let svgImpl = new SVGParseImpl(); @@ -57,7 +59,8 @@ struct svgTestCasePage { Button("加载SVG图片") .onClick(()=>{ - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia($r('app.media.iconsvg').id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent($r('app.media.iconsvg').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data = ' + data) let svgImpl = new SVGParseImpl(); diff --git a/entry/src/main/ets/pages/tempUrlTestPage.ets b/entry/src/main/ets/pages/tempUrlTestPage.ets index 5c614d4..1115662 100644 --- a/entry/src/main/ets/pages/tempUrlTestPage.ets +++ b/entry/src/main/ets/pages/tempUrlTestPage.ets @@ -16,6 +16,7 @@ import router from '@system.router'; import { ImageKnifeComponent, ImageKnifeOption, + ImageKnifeGlobal, ImageKnifeDrawFactory, ScaleType } from '@ohos/imageknife' @@ -90,7 +91,7 @@ struct tempUrlTestPage { name: 'ImageKnifeParseGIF' }) // gif解析在子线程,请在页面构建后创建worker,注入imageknife - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testAllCacheInfoPage.ets b/entry/src/main/ets/pages/testAllCacheInfoPage.ets index a2f4123..9a6c414 100644 --- a/entry/src/main/ets/pages/testAllCacheInfoPage.ets +++ b/entry/src/main/ets/pages/testAllCacheInfoPage.ets @@ -17,6 +17,7 @@ import {AllCacheInfo,IAllCacheInfoCallback} from '@ohos/imageknife' import {ImageKnifeComponent} from '@ohos/imageknife' import {TransformType} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' @Entry @@ -206,4 +207,4 @@ struct TestAllCacheInfoPage { } -var ImageKnife = globalThis.ImageKnife \ No newline at end of file +var ImageKnife = (ImageKnifeGlobal.getInstance().getImageKnife()) \ No newline at end of file diff --git a/entry/src/main/ets/pages/testGifDontAnimatePage.ets b/entry/src/main/ets/pages/testGifDontAnimatePage.ets index 22cd6cd..ad9cc3f 100644 --- a/entry/src/main/ets/pages/testGifDontAnimatePage.ets +++ b/entry/src/main/ets/pages/testGifDontAnimatePage.ets @@ -14,6 +14,7 @@ */ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker' @@ -90,7 +91,7 @@ struct TestGifDontAnimatePage { type: 'classic', name: 'ImageKnifeParseGIF' }) - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets b/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets index fadbe80..993f5e9 100644 --- a/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets +++ b/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ImageKnife, ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife' +import { ImageKnife,ImageKnifeGlobal,ImageKnifeGlobal, ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife' import worker, { MessageEvents } from '@ohos.worker' import Prompt from '@system.prompt' @@ -86,7 +86,7 @@ struct TestGifLoadWithWorkerPage { this.my_gif_worker.onmessage = (e: MessageEvents) => { console.log("my_gif_worker.onmessage: " + e.data) } - globalThis.ImageKnife.setGifWorker(this.my_gif_worker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.my_gif_worker) //子线程加载gif,不阻塞toast的消失 this.options = { @@ -102,7 +102,7 @@ struct TestGifLoadWithWorkerPage { .onClick(() => { console.log("ImageKnifeComponent button 加载gif onClick()") - globalThis.ImageKnife.setGifWorker(undefined) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(undefined) //主线程加载gif,阻塞toast的消失 this.options = { diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets index 43fb568..827fb82 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets @@ -14,6 +14,7 @@ */ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker' @@ -190,7 +191,7 @@ struct TestImageKnifeOptionChangedPage { type: 'classic', name: 'ImageKnifeParseGIF' }) - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets index 34d67bb..3442018 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets @@ -14,6 +14,7 @@ */ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' +import {ImageKnifeGlobal} from '@ohos/imageknife' import {ScaleType} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import {GrayscaleTransformation} from '@ohos/imageknife' @@ -203,7 +204,7 @@ struct TestImageKnifeOptionChangedPage3 { type: 'classic', name: 'ImageKnifeParseGIF' }) - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets index 39252c8..3b50cad 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets @@ -21,7 +21,8 @@ import { SketchFilterTransformation, ScaleTypeHelper, IDrawLifeCycle, - ScaleType + ScaleType, + ImageKnifeGlobal } from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; @@ -118,7 +119,7 @@ struct TestImageKnifeOptionChangedPage4 { type: 'classic', name: 'ImageKnifeParseGIF' }) - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + ImageKnifeGlobal.getInstance().getImageKnife().setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets index b7cf616..dd61a2a 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets @@ -16,6 +16,7 @@ import { GrayscaleTransformation, ImageKnifeComponent, ImageKnifeData, + ImageKnifeGlobal, ImageKnifeOption, RotateImageTransformation, SketchFilterTransformation, @@ -100,7 +101,7 @@ struct TestImageKnifeOptionChangedPage5 { type: 'classic', name: 'ImageKnifeParseGIF' }) - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testPreloadPage.ets b/entry/src/main/ets/pages/testPreloadPage.ets index eda05a8..a0ec611 100644 --- a/entry/src/main/ets/pages/testPreloadPage.ets +++ b/entry/src/main/ets/pages/testPreloadPage.ets @@ -15,6 +15,7 @@ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' import {RequestOption} from '@ohos/imageknife' +import {ImageKnifeGlobal } from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker' @@ -90,7 +91,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -124,7 +125,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -159,7 +160,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -191,7 +192,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -230,7 +231,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -269,7 +270,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -310,7 +311,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -349,7 +350,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -388,7 +389,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -427,7 +428,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -466,7 +467,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -505,7 +506,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -544,7 +545,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -583,7 +584,7 @@ struct TestPreloadPage { } return false; }) - globalThis.ImageKnife.preload(request); + ImageKnifeGlobal.getInstance().getImageKnife().preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -620,7 +621,7 @@ struct TestPreloadPage { name: 'ImageKnifeParseGIF' }) // gif解析在子线程,请在页面构建后创建worker,注入imageknife - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + ImageKnifeGlobal.getInstance().getImageKnife().setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/transformPixelMapPage.ets b/entry/src/main/ets/pages/transformPixelMapPage.ets index c12da4a..1fd08f4 100644 --- a/entry/src/main/ets/pages/transformPixelMapPage.ets +++ b/entry/src/main/ets/pages/transformPixelMapPage.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { RequestOption } from '@ohos/imageknife' +import { RequestOption,ImageKnifeGlobal} from '@ohos/imageknife' import { CropCircleTransformation } from '@ohos/imageknife' import { RoundedCornersTransformation } from '@ohos/imageknife' import { @@ -1015,4 +1015,4 @@ struct TransformPixelMapPage { } } -var ImageKnife = globalThis.ImageKnife \ No newline at end of file +var ImageKnife = ImageKnifeGlobal.getInstance().getImageKnife(); \ No newline at end of file diff --git a/entry/src/ohosTest/ets/test/Ability.test.ets b/entry/src/ohosTest/ets/test/Ability.test.ets index 08d3135..47b99a5 100644 --- a/entry/src/ohosTest/ets/test/Ability.test.ets +++ b/entry/src/ohosTest/ets/test/Ability.test.ets @@ -19,25 +19,25 @@ import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from export default function abilityTest() { describe('ActsAbilityTest', function () { // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(function () { + beforeAll( ()=> { // Presets an action, which is performed only once before all test cases of the test suite start. // This API supports only one parameter: preset action function. }) - beforeEach(function () { + beforeEach( ()=> { // Presets an action, which is performed before each unit test case starts. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: preset action function. }) - afterEach(function () { + afterEach( ()=> { // Presets a clear action, which is performed after each unit test case ends. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: clear action function. }) - afterAll(function () { + afterAll( ()=> { // Presets a clear action, which is performed after all test cases of the test suite end. // This API supports only one parameter: clear action function. }) - it('assertContain',0, function () { + it('assertContain',0, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); let a = 'abc' diff --git a/entry/src/ohosTest/ets/test/imageknife.test.ets b/entry/src/ohosTest/ets/test/imageknife.test.ets index e1bd0e8..88a937e 100644 --- a/entry/src/ohosTest/ets/test/imageknife.test.ets +++ b/entry/src/ohosTest/ets/test/imageknife.test.ets @@ -14,41 +14,41 @@ */ import hilog from '@ohos.hilog'; import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium' -import {ImageKnife,ImageKnifeDrawFactory} from '@ohos/imageknife' +import {ImageKnife,ImageKnifeDrawFactory,ImageKnifeGlobal} from '@ohos/imageknife' export default function ImageKnifeTest() { describe('ImageKnifeTest', function () { // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(function () { + beforeAll( ()=> { // Presets an action, which is performed only once before all test cases of the test suite start. // This API supports only one parameter: preset action function. }) - beforeEach(function () { + beforeEach( ()=> { // Presets an action, which is performed before each unit test case starts. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: preset action function. }) - afterEach(function () { + afterEach( ()=> { // Presets a clear action, which is performed after each unit test case ends. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: clear action function. }) - afterAll(function () { + afterAll( ()=> { // Presets a clear action, which is performed after all test cases of the test suite end. // This API supports only one parameter: clear action function. }) - it('TestGlobalImageKnife',0, function () { - globalThis.ImageKnife = ImageKnife.with(globalThis.TestAbilityContext) - expect(globalThis.ImageKnife).not().assertUndefined() + it('TestGlobalImageKnife',0, ()=> { + let global:ImageKnifeGlobal = ImageKnife.with(ImageKnifeGlobal.getInstance().getHapContext()) + expect(global.getImageKnife()).not().assertUndefined() }) - it('TestGlobalDefaultLifeCycle',1, function () { - globalThis.ImageKnife = ImageKnife.with(globalThis.TestAbilityContext) - globalThis.ImageKnife.setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5)) - let globalLifeCycle = globalThis.ImageKnife.getDefaultLifeCycle(); + it('TestGlobalDefaultLifeCycle',1, ()=> { + ImageKnife.with(ImageKnifeGlobal.getInstance().getHapContext()) + (ImageKnifeGlobal.getInstance().getImageKnife()).setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5)) + let globalLifeCycle = (ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(); expect(globalLifeCycle).not().assertUndefined() }) diff --git a/entry/src/ohosTest/ets/test/logutil.test.ets b/entry/src/ohosTest/ets/test/logutil.test.ets index c6c600c..71f61a1 100644 --- a/entry/src/ohosTest/ets/test/logutil.test.ets +++ b/entry/src/ohosTest/ets/test/logutil.test.ets @@ -17,27 +17,27 @@ import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from import {LogUtil} from '@ohos/imageknife' export default function LogUtilTest() { - describe('LogUtilTest', function () { + describe('LogUtilTest', ()=> { // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(function () { + beforeAll( ()=> { // Presets an action, which is performed only once before all test cases of the test suite start. // This API supports only one parameter: preset action function. }) - beforeEach(function () { + beforeEach( ()=> { // Presets an action, which is performed before each unit test case starts. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: preset action function. }) - afterEach(function () { + afterEach( ()=> { // Presets a clear action, which is performed after each unit test case ends. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: clear action function. }) - afterAll(function () { + afterAll( ()=> { // Presets a clear action, which is performed after all test cases of the test suite end. // This API supports only one parameter: clear action function. }) - it('TestLogUtilLevel',0, function () { + it('TestLogUtilLevel',0, ()=> { console.log("tag:LogUtil LogUtil.mLogLevel="+LogUtil.mLogLevel); LogUtil.mLogLevel = LogUtil.OFF; diff --git a/entry/src/ohosTest/ets/test/lrucache.test.ets b/entry/src/ohosTest/ets/test/lrucache.test.ets index 38f68f9..f70a2dc 100644 --- a/entry/src/ohosTest/ets/test/lrucache.test.ets +++ b/entry/src/ohosTest/ets/test/lrucache.test.ets @@ -17,33 +17,33 @@ import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from import {LruCache} from '@ohos/imageknife' // DiskLruCache用例由DiskLruCache三方库提供 export default function lruCacheTest() { - describe('lruCacheTest', function () { + describe('lruCacheTest', ()=> { // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(function () { + beforeAll( ()=> { // Presets an action, which is performed only once before all test cases of the test suite start. // This API supports only one parameter: preset action function. }) - beforeEach(function () { + beforeEach( ()=> { // Presets an action, which is performed before each unit test case starts. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: preset action function. }) - afterEach(function () { + afterEach( ()=> { // Presets a clear action, which is performed after each unit test case ends. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: clear action function. }) - afterAll(function () { + afterAll( ()=> { // Presets a clear action, which is performed after all test cases of the test suite end. // This API supports only one parameter: clear action function. }) - it('testLruCacheSize',0, function () { + it('testLruCacheSize',0, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. let memoryCache = new LruCache(100); expect(memoryCache.size).assertEqual(0); expect(memoryCache.maxsize).assertEqual(100) }) - it('testLruCachePut',1, function () { + it('testLruCachePut',1, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. let memoryCache = new LruCache(5); memoryCache.put("1","1"); @@ -57,7 +57,7 @@ export default function lruCacheTest() { let result = memoryCache.get("1") expect(result).assertEqual(undefined) }) - it('testLruCacheGet',2, function () { + it('testLruCacheGet',2, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. let memoryCache = new LruCache(5); memoryCache.put("1","1"); @@ -71,7 +71,7 @@ export default function lruCacheTest() { let result = memoryCache.get("2") expect(result).assertEqual("2") }) - it('testLruCacheAlgorithm',3, function () { + it('testLruCacheAlgorithm',3, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. let memoryCache = new LruCache(5); memoryCache.put("1","1"); @@ -83,14 +83,14 @@ export default function lruCacheTest() { memoryCache.get("1"); memoryCache.get("2"); - memoryCache.foreachLruCache(function (value, key, index) { + memoryCache.foreachLruCache( (value, key, index)=> { if(index == 0){ expect(key).assertEqual("2") expect(value).assertEqual("2") } }) }) - it('testLruCacheRemove',4, function () { + it('testLruCacheRemove',4, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. let memoryCache = new LruCache(5); memoryCache.put("1","1"); @@ -104,14 +104,14 @@ export default function lruCacheTest() { memoryCache.remove("2"); - memoryCache.foreachLruCache(function (value, key, index) { + memoryCache.foreachLruCache( (value, key, index)=> { if(index == 0){ expect(key).assertEqual("1") expect(value).assertEqual("1") } }) }) - it('testLruCacheResize',5, function () { + it('testLruCacheResize',5, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. let memoryCache = new LruCache(5); memoryCache.put("1","1"); diff --git a/entry/src/ohosTest/ets/test/requestoption.test.ets b/entry/src/ohosTest/ets/test/requestoption.test.ets index 26bff91..fc90593 100644 --- a/entry/src/ohosTest/ets/test/requestoption.test.ets +++ b/entry/src/ohosTest/ets/test/requestoption.test.ets @@ -18,43 +18,43 @@ import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from import {RequestOption} from '@ohos/imageknife' export default function RequestOptionTest() { - describe('RequestOptionTest', function () { + describe('RequestOptionTest', ()=> { // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(function () { + beforeAll( ()=> { // Presets an action, which is performed only once before all test cases of the test suite start. // This API supports only one parameter: preset action function. }) - beforeEach(function () { + beforeEach( ()=> { // Presets an action, which is performed before each unit test case starts. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: preset action function. }) - afterEach(function () { + afterEach( ()=> { // Presets a clear action, which is performed after each unit test case ends. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: clear action function. }) - afterAll(function () { + afterAll( ()=> { // Presets a clear action, which is performed after all test cases of the test suite end. // This API supports only one parameter: clear action function. }) - it('TestRequestOption',0, function () { + it('TestRequestOption',0, ()=> { let option = new RequestOption(); expect(option.requestListeners.length == 0).assertTrue() }) - it('TestConfigLoadSrc',1, function () { + it('TestConfigLoadSrc',1, ()=> { let option = new RequestOption(); expect(option.loadSrc).assertEqual(undefined) option.loadSrc = $r('app.media.icon') expect(JSON.stringify(option.loadSrc)).assertEqual(JSON.stringify($r('app.media.icon'))) }) - it('TestConfigViewSize',2, function () { + it('TestConfigViewSize',2, ()=> { let option = new RequestOption(); option.loadSrc = $r('app.media.icon') option.setImageViewSize({width:100,height:100}) expect(JSON.stringify(option.size)).assertEqual(JSON.stringify({width:100,height:100})) }) - it('TestNormalConfigInfo',3, function () { + it('TestNormalConfigInfo',3, ()=>{ let option = new RequestOption(); expect(option.strategy.getName()).assertEqual('AUTOMATIC') diff --git a/entry/src/ohosTest/ets/test/transfrom.test.ets b/entry/src/ohosTest/ets/test/transfrom.test.ets index 60b6084..8802154 100644 --- a/entry/src/ohosTest/ets/test/transfrom.test.ets +++ b/entry/src/ohosTest/ets/test/transfrom.test.ets @@ -39,46 +39,46 @@ import { } from '@ohos/imageknife' export default function Transform() { - describe('Transform', function () { + describe('Transform', ()=>{ // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(function () { + beforeAll(()=>{ // Presets an action, which is performed only once before all test cases of the test suite start. // This API supports only one parameter: preset action function. }) - beforeEach(function () { + beforeEach(()=>{ // Presets an action, which is performed before each unit test case starts. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: preset action function. }) - afterEach(function () { + afterEach(()=>{ // Presets a clear action, which is performed after each unit test case ends. // The number of execution times is the same as the number of test cases defined by **it**. // This API supports only one parameter: clear action function. }) - afterAll(function () { + afterAll(()=>{ // Presets a clear action, which is performed after all test cases of the test suite end. // This API supports only one parameter: clear action function. }) - it('TestBlurTransformation', 0, function () { + it('TestBlurTransformation', 0, ()=>{ let blur = new BlurTransformation(15); expect(blur.getName()).assertEqual('BlurTransformation _mRadius:15') }) - it('TestBrightnessFilterTransformation', 1, function () { + it('TestBrightnessFilterTransformation', 1, ()=>{ let bright = new BrightnessFilterTransformation(20); expect(bright.getName()).assertEqual("BrightnessFilterTransformation:20") }) - it('TestContrastFilterTransformation', 2, function () { + it('TestContrastFilterTransformation', 2, ()=>{ let constrast = new ContrastFilterTransformation(30); expect(constrast.getName()).assertEqual("ContrastFilterTransformation:30") }) - it('TestCropCircleTransformation', 3, function () { + it('TestCropCircleTransformation', 3, ()=>{ let cropCircle = new CropCircleTransformation(); expect(cropCircle.getName()).assertContain("CropCircleTransformation") expect(cropCircle.getName()).assertContain(";mCenterX:") expect(cropCircle.getName()).assertContain(";mCenterY:") expect(cropCircle.getName()).assertContain(";mRadius:") }) - it('TestCropCircleWithBorderTransformation', 4, function () { + it('TestCropCircleWithBorderTransformation', 4, ()=>{ let CropCircleWithBorder = new CropCircleWithBorderTransformation(10,{r_color:100,g_color:100,b_color:100 }); expect(CropCircleWithBorder.getName()).assertContain("CropCircleTransformation") expect(CropCircleWithBorder.getName()).assertContain(";mCenterX:") @@ -89,63 +89,63 @@ export default function Transform() { expect(CropCircleWithBorder.getName()).assertContain(";mGColor:") expect(CropCircleWithBorder.getName()).assertContain(";mBColor:") }) - it('TestCropSquareTransformation', 5, function () { + it('TestCropSquareTransformation', 5, ()=>{ let CropSquare = new CropSquareTransformation(); expect(CropSquare.getName()).assertContain("CropSquareTransformation") }) - it('TestCropTransformation', 6, function () { + it('TestCropTransformation', 6, ()=>{ let crop = new CropTransformation(10,10,CropType.CENTER); expect(crop.getName()).assertContain("CropCircleTransformation"+ ";mWidth:10" + ";mHeight:10" + ";mCropType:1" ) }) - it('TestGrayscaleTransformation', 7, function () { + it('TestGrayscaleTransformation', 7, ()=>{ let grayscale = new GrayscaleTransformation(); expect(grayscale.getName()).assertContain("GrayscaleTransformation" ) }) - it('TestInvertFilterTransformation', 8, function () { + it('TestInvertFilterTransformation', 8, ()=>{ let invert = new InvertFilterTransformation(); expect(invert.getName()).assertContain("InvertFilterTransformation" ) }) - it('TestPixelationFilterTransformation', 9, function () { + it('TestPixelationFilterTransformation', 9, ()=>{ let pixelation = new PixelationFilterTransformation(); expect(pixelation.getName()).assertContain("PixelationFilterTransformation" ) }) - it('TestRotateImageTransformation', 10, function () { + it('TestRotateImageTransformation', 10, ()=>{ let rotateImage = new RotateImageTransformation(180); expect(rotateImage.getName()).assertContain("RotateImageTransformation" + ";degreesToRotate:180") }) - it('TestRoundedCornersTransformation', 11, function () { + it('TestRoundedCornersTransformation', 11, ()=>{ let roundConer = new RoundedCornersTransformation({top_left:5,bottom_left:5,top_right:5,bottom_right:5}); expect(roundConer.getName()).assertContain("RoundedCornersTransformation" + ";mTop_left:" + 5 + ";mTop_right:" + 5 + ";mBottom_left:" + 5 + ";mBottom_right:" + 5) }) - it('TestSepiaFilterTransformation', 12, function () { + it('TestSepiaFilterTransformation', 12, ()=>{ let speia = new SepiaFilterTransformation(); expect(speia.getName()).assertContain("SepiaFilterTransformation") }) - it('TestSketchFilterTransformation', 13, function () { + it('TestSketchFilterTransformation', 13, ()=>{ let Sketch = new SketchFilterTransformation(); expect(Sketch.getName()).assertContain("SketchFilterTransformation") }) - it('TestMaskTransformation', 14, function () { + it('TestMaskTransformation', 14, ()=>{ let mask = new MaskTransformation($r('app.media.icon')); expect(mask.getName()).assertContain("MaskTransformation") }) - it('TestSwirlFilterTransformation', 15, function () { + it('TestSwirlFilterTransformation', 15, ()=>{ let swirl = new SwirlFilterTransformation(10,180,[10,10]); expect(swirl.getName()).assertContain("SwirlFilterTransformation") }) - it('TestKuwaharaFilterTransform', 16, function () { + it('TestKuwaharaFilterTransform', 16, ()=>{ let kuwahara = new KuwaharaFilterTransform(10); expect(kuwahara.getName()).assertContain("KuwaharaFilterTransform _mRadius:10") }) - it('TestToonFilterTransform', 17, function () { + it('TestToonFilterTransform', 17, ()=>{ let toon = new ToonFilterTransform(10); expect(toon.getName()).assertContain("ToonFilterTransform threshold:") expect(toon.getName()).assertContain(";quantizationLevels:") }) - it('TestVignetteFilterTransform', 18, function () { + it('TestVignetteFilterTransform', 18, ()=>{ let vignette = new VignetteFilterTransform([0.5, 0.5],[0.0, 0.0, 0.0],[0.3, 0.75]); expect(vignette.getName()).assertContain("VignetteFilterTransform centerPoint:") expect(vignette.getName()).assertContain(";vignetteColor:") diff --git a/entry/src/ohosTest/ets/testability/TestAbility.ets b/entry/src/ohosTest/ets/testability/TestAbility.ets index ce8497d..8b92e2a 100644 --- a/entry/src/ohosTest/ets/testability/TestAbility.ets +++ b/entry/src/ohosTest/ets/testability/TestAbility.ets @@ -18,7 +18,7 @@ import hilog from '@ohos.hilog'; import { Hypium } from '@ohos/hypium'; import testsuite from '../test/List.test'; import window from '@ohos.window'; - +import {ImageKnife,ImageKnifeDrawFactory,ImageKnifeGlobal} from '@ohos/imageknife' export default class TestAbility extends UIAbility { onCreate(want, launchParam) { hilog.info(0x0000, 'testTag', '%{public}s', 'TestAbility onCreate'); @@ -30,7 +30,7 @@ export default class TestAbility extends UIAbility { abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - globalThis.TestAbilityContext = this.context.createModuleContext("entry_test") + (ImageKnifeGlobal.getInstance().setHapContext(this.context.createModuleContext("entry_test"))) } onDestroy() { diff --git a/imageknife/index.ets b/imageknife/index.ets index f0c209b..dcf1bdb 100644 --- a/imageknife/index.ets +++ b/imageknife/index.ets @@ -93,6 +93,7 @@ export * from './src/main/ets/components/3rd_party/upng/UPNG' * ImageKnife */ export * from './src/main/ets/components/imageknife/ImageKnife' +export * from './src/main/ets/components/imageknife/ImageKnifeGlobal' export * from './src/main/ets/components/imageknife/RequestOption' export * from './src/main/ets/components/imageknife/ImageKnifeComponent' export * from './src/main/ets/components/imageknife/ImageKnifeDrawFactory' diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets index c631cef..cffa632 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets @@ -30,8 +30,7 @@ import type {IDataFetch} from '../imageknife/networkmanage/IDataFetch' import {ParseResClient} from '../imageknife/resourcemanage/ParseResClient' import type {IResourceFetch} from '../imageknife/resourcemanage/IResourceFetch' import {ImageKnifeData,ImageKnifeType} from '../imageknife/ImageKnifeData' -import {FileUtils} from '../cache/FileUtils' -import {FileReader} from '../cache/FileReader' +import {ImageKnifeGlobal} from '../imageknife/ImageKnifeGlobal' import image from "@ohos.multimedia.image" import {CompressBuilder} from "../imageknife/compress/CompressBuilder" import { IDrawLifeCycle } from '../imageknife/interface/IDrawLifeCycle' @@ -39,7 +38,7 @@ import {LogUtil} from '../imageknife/utils/LogUtil' export class ImageKnife { static readonly SEPARATOR: string = '/' - private imageKnifeContext; + private memoryCache: LruCache; private diskMemoryCache: DiskLruCache; private dataFetch: IDataFetch; @@ -64,14 +63,13 @@ export class ImageKnife { // 开发者可配置全局缓存 private engineKeyImpl: EngineKeyInterface; - private constructor(imgCtx) { - this.imageKnifeContext = imgCtx; + private constructor() { // 构造方法传入size 为保存文件个数 this.memoryCache = new LruCache(100); // 创建disk缓存 传入的size 为多少比特 比如20KB 传入20*1024 - this.diskMemoryCache = DiskLruCache.create(this.imageKnifeContext); + this.diskMemoryCache = DiskLruCache.create(ImageKnifeGlobal.getInstance().getHapContext()); // 创建网络下载能力 this.dataFetch = new DownloadClient(); @@ -80,7 +78,7 @@ export class ImageKnife { this.resourceFetch = new ParseResClient(); // 初始化本地 文件保存 - this.filesPath = this.imageKnifeContext.filesDir; + this.filesPath = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; this.runningRequest = new Array(); this.pendingRequest = new Array(); @@ -95,11 +93,20 @@ export class ImageKnife { return this.memoryCache; } - public static with(context): ImageKnife{ - if (!this.sInstance) { - this.sInstance = new ImageKnife(context); + public static with(context:Record): ImageKnifeGlobal{ + // 存入hapContext; + let global:ImageKnifeGlobal = ImageKnifeGlobal.getInstance(); + global.setHapContext(context) + + // 初始化ImageKnife + if (!ImageKnife.sInstance) { + ImageKnife.sInstance = new ImageKnife(); } - return this.sInstance; + + // 存入ImageKnife + global.setImageKnife(ImageKnife.sInstance) + + return global; } getDiskMemoryCache(): DiskLruCache{ @@ -115,7 +122,7 @@ export class ImageKnife { } getImageKnifeContext() { - return this.imageKnifeContext; + return ImageKnifeGlobal.getInstance().getHapContext(); } setMemoryCache(lrucache: LruCache) { @@ -175,9 +182,9 @@ export class ImageKnife { // 替代原来的DiskLruCache public replaceDiskLruCache(size:number) { if (this.diskMemoryCache.getCacheMap().size() <= 0) { - this.diskMemoryCache = DiskLruCache.create(this.imageKnifeContext, size); + this.diskMemoryCache = DiskLruCache.create(ImageKnifeGlobal.getInstance().getHapContext(), size); } else { - let newDiskLruCache = DiskLruCache.create(this.imageKnifeContext, size); + let newDiskLruCache = DiskLruCache.create(ImageKnifeGlobal.getInstance().getHapContext(), size); this.diskMemoryCache.foreachDiskLruCache(function (value, key, map) { newDiskLruCache.set(key, value); }) diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets index 5966051..7ee3017 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets @@ -14,6 +14,7 @@ */ import { ImageKnifeOption } from '../imageknife/ImageKnifeOption' +import { ImageKnifeGlobal } from '../imageknife/ImageKnifeGlobal' import { TransformType } from '../imageknife/transform/TransformType' import { RequestOption } from '../imageknife/RequestOption' import { ImageKnifeData } from '../imageknife/ImageKnifeData' @@ -272,7 +273,7 @@ export struct ImageKnifeComponent { this.configCacheStrategy(request); this.configDisplay(request); this.configRenderGpu(request); - globalThis.ImageKnife.call(request); + ImageKnifeGlobal.getInstance().getImageKnife().call(request); } displayPlaceholder(data: ImageKnifeData) { @@ -280,7 +281,7 @@ export struct ImageKnifeComponent { this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { - if (!this.drawLifeCycleHasConsumed(globalThis.ImageKnife.getDefaultLifeCycle(), 'displayPlaceholder', this.context, data, this.imageKnifeOption, + if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayPlaceholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { @@ -298,7 +299,7 @@ export struct ImageKnifeComponent { this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { - if (!this.drawLifeCycleHasConsumed(globalThis.ImageKnife.getDefaultLifeCycle(), 'displayProgress', this.context, percent, this.imageKnifeOption, + if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayProgress', this.context, percent, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { @@ -316,7 +317,7 @@ export struct ImageKnifeComponent { this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { - if (!this.drawLifeCycleHasConsumed(globalThis.ImageKnife.getDefaultLifeCycle(), 'displayThumbSizeMultiplier', this.context, data, this.imageKnifeOption, + if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayThumbSizeMultiplier', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { @@ -332,7 +333,7 @@ export struct ImageKnifeComponent { this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { - if (!this.drawLifeCycleHasConsumed(globalThis.ImageKnife.getDefaultLifeCycle(), 'displayMainSource', this.context, data, this.imageKnifeOption, + if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayMainSource', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { @@ -350,7 +351,7 @@ export struct ImageKnifeComponent { this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { - if (!this.drawLifeCycleHasConsumed(globalThis.ImageKnife.getDefaultLifeCycle(), 'displayRetryholder', this.context, data, this.imageKnifeOption, + if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayRetryholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { @@ -367,7 +368,7 @@ export struct ImageKnifeComponent { this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { - if (!this.drawLifeCycleHasConsumed(globalThis.ImageKnife.getDefaultLifeCycle(), 'displayErrorholder', this.context, data, this.imageKnifeOption, + if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayErrorholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) })) { diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets index 5b20d3f..93f2924 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets @@ -28,7 +28,7 @@ export class ImageKnifeGlobal { private _objects = new Map(); - public static getContext(): ImageKnifeGlobal { + public static getInstance(): ImageKnifeGlobal { if (!ImageKnifeGlobal.instance) { ImageKnifeGlobal.instance = new ImageKnifeGlobal(); } diff --git a/imageknife/src/main/ets/components/imageknife/RequestOption.ets b/imageknife/src/main/ets/components/imageknife/RequestOption.ets index 05c44d9..8d2a77f 100644 --- a/imageknife/src/main/ets/components/imageknife/RequestOption.ets +++ b/imageknife/src/main/ets/components/imageknife/RequestOption.ets @@ -46,6 +46,7 @@ import { KuwaharaFilterTransform } from '../imageknife/transform/KuwaharaFilterT import { ToonFilterTransform } from '../imageknife/transform/ToonFilterTransform' import { VignetteFilterTransform } from '../imageknife/transform/VignetteFilterTransform' import { LogUtil } from '../imageknife/utils/LogUtil' +import { ImageKnifeGlobal } from './ImageKnifeGlobal' export class RequestOption { loadSrc: string | PixelMap | Resource; @@ -436,16 +437,16 @@ export class RequestOption { // 等落盘结束后主动调用#removeCurrentAndSearchNext方法 }else{ // 非落盘情况,直接进行寻找下一个加载 - globalThis.ImageKnife.removeRunning(this); + (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); } // 加载成功之后 - globalThis.ImageKnife.removeRunning(this); + (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); } // 图片文件落盘之后会自动去寻找下一个数据加载 removeCurrentAndSearchNext(){ - globalThis.ImageKnife.removeRunning(this); + (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); } loadError(err) { @@ -465,7 +466,7 @@ export class RequestOption { } } // 加载失败之后 - globalThis.ImageKnife.removeRunning(this); + (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); } } diff --git a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets index 0631338..6830b98 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets @@ -22,6 +22,7 @@ import {DataStringPathProvider} from '../compress/provider/DataStringPathProvide import {RecourseProvider} from '../compress/provider/RecourseProvider' import { Engine } from '../compress/Engine' import { ImageKnife } from '../ImageKnife' +import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; export class CompressBuilder { private _mTargetDir: string; @@ -106,7 +107,7 @@ export class CompressBuilder { public async get():Promise { if (!this._mTargetDir) { - let context = globalThis.ImageKnife.getImageKnifeContext(); + let context:Record = (ImageKnifeGlobal.getInstance().getHapContext() as Record); let path = context.filesDir; var timestamp = (new Date()).valueOf(); this._outFilePath = path + "/compress/" + timestamp + (Math.random() * 100).toFixed(0) + ".jpg"; @@ -201,7 +202,7 @@ export class CompressBuilder { } private getImageCacheFile() { - let context = globalThis.ImageKnife.getImageKnifeContext(); + let context:Record = (ImageKnifeGlobal.getInstance().getHapContext() as Record) var timestamp = (new Date()).valueOf(); this._outFilePath = context.filesDir + "/compress/" + timestamp + (Math.random() * 100).toFixed(0) + ".jpg"; this.startCompress(); diff --git a/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets b/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets index d84bef4..b20da93 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets @@ -16,6 +16,8 @@ import {CompressAdapter, PixelMapFormat} from "../provider/CompressAdapter" import {CompressDataListener} from "../listener/CompressDataListener" import {FileTypeUtil} from '../../../imageknife/utils/FileTypeUtil' +import { ImageKnifeGlobal } from '../../ImageKnifeGlobal'; +import resourceManager from '@ohos.resourceManager'; export class RecourseProvider extends CompressAdapter { private static CHARS: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; @@ -42,8 +44,8 @@ export class RecourseProvider extends CompressAdapter { if (!this._mResourceData) { throw Error("compress resource is empty"); } - globalThis.ImageKnife.getImageKnifeContext().resourceManager - .getMedia(this._mResourceData.id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent(this._mResourceData.id) .then(data => { let buffer = this.uint8ArrayToBuffer(data); let fileTypeUtil = new FileTypeUtil() diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets index 04a6762..1cc92fb 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets @@ -19,6 +19,7 @@ import { NetworkDownloadClient } from './NetworkDownloadClient' import { LoadLocalFileClient } from './LoadLocalFileClient' import { LoadDataShareFileClient } from './LoadDataShareFileClient' import loadRequest from '@ohos.request'; +import { ImageKnifeGlobal } from '../ImageKnifeGlobal' // 数据加载器 export class DownloadClient implements IDataFetch { @@ -28,8 +29,11 @@ export class DownloadClient implements IDataFetch { loadData(request: RequestOption, onCompleteFunction, onErrorFunction) { if (typeof request.loadSrc == 'string') { - if (request.loadSrc.startsWith(globalThis.ImageKnife.getImageKnifeContext() - .filesDir) || request.loadSrc.startsWith(globalThis.ImageKnife.getImageKnifeContext().cacheDir)) { + let fileDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; + let cacheDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as Record).cacheDir as string + + if (request.loadSrc.startsWith(fileDir) || + request.loadSrc.startsWith(cacheDir)) { // 本地沙盒 this.localFileClient.loadData(request, onCompleteFunction, onErrorFunction) } else if (request.loadSrc.startsWith('datashare://') || request.loadSrc.startsWith('file://')) { diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets index 9886cea..d3cf5ab 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets @@ -19,7 +19,8 @@ import { SparkMD5 } from '../../3rd_party/sparkmd5/spark-md5' import { FileUtils } from '../../cache/FileUtils' import loadRequest from '@ohos.request'; import { LogUtil } from '../utils/LogUtil' - +import { ImageKnifeGlobal } from '../ImageKnifeGlobal' +import common from '@ohos.app.ability.common' // 数据加载器 export class NetworkDownloadClient implements IDataFetch { loadData(request: RequestOption, onComplete: (img: ArrayBuffer) => void, onError: (err: string) => void) { @@ -41,7 +42,7 @@ export class NetworkDownloadClient implements IDataFetch { enableMetered: true, }; let loadTask = null; - loadRequest.downloadFile(globalThis.ImageKnife.getImageKnifeContext(), downloadConfig).then(downloadTask => { + loadRequest.downloadFile( (ImageKnifeGlobal.getInstance().getHapContext() as common.BaseContext ), downloadConfig).then(downloadTask => { if (downloadTask) { loadTask = downloadTask; diff --git a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets index b622d83..44a0586 100644 --- a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets +++ b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets @@ -17,14 +17,15 @@ import type {IResourceFetch} from '../resourcemanage/IResourceFetch' import {ResourceTypeEts} from '../../imageknife/constants/ResourceTypeEts' import resourceManager from '@ohos.resourceManager'; +import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; export class ParseResClient implements IResourceFetch { loadResource(res: Resource, onCompleteFunction, onErrorFunction) { let resId = res.id; let resType = res.type; if (resType == ResourceTypeEts.MEDIA) { - globalThis.ImageKnife.getImageKnifeContext().resourceManager - .getMedia(resId) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContent(resId) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); onCompleteFunction(arrayBuffer) diff --git a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets index a9590ad..03dbc09 100644 --- a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets +++ b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets @@ -18,14 +18,15 @@ import {ResourceTypeEts} from '../../imageknife/constants/ResourceTypeEts' import {Base64} from '../../cache/Base64' import resourceManager from '@ohos.resourceManager'; +import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; export class ParseResClientBase64 implements IResourceFetch { loadResource(res: Resource, onCompleteFunction, onErrorFunction) { let resId = res.id; let resType = res.type; if (resType == ResourceTypeEts.MEDIA) { - globalThis.ImageKnife.getImageKnifeContext().resourceManager - .getMediaBase64(resId) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + .getMediaContentBase64(resId) .then(data => { let matchReg = ';base64,'; var firstIndex = data.indexOf(matchReg) diff --git a/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets index 51a413c..c9e8c98 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets @@ -21,6 +21,8 @@ import { MaskUtils } from "../utils/MaskUtils" import {LogUtil} from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" import resmgr from "@ohos.resourceManager" +import { ImageKnifeGlobal } from '../ImageKnifeGlobal' +import resourceManager from '@ohos.resourceManager' export class MaskTransformation implements BaseTransform { private _mResourceData: Resource; @@ -84,7 +86,7 @@ export class MaskTransformation implements BaseTransform { if (!this._mResourceData) { throw new Error("MaskTransformation resource is empty"); } - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getMedia(this._mResourceData.id) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager).getMediaContent(this._mResourceData.id) .then(array => { let buffer = array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset); var imageSource = image.createImageSource(buffer as any); diff --git a/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets index 62de0b1..0ffc41d 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets @@ -12,6 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import resourceManager from '@ohos.resourceManager'; +import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; import type {DataCallBack} from "../interface/DataCallBack" export namespace ColorUtils { @@ -23,7 +25,7 @@ export namespace ColorUtils { export function parseColor(c: string, callback: DataCallBack) { var reColor = 'sys.color.' + c; - globalThis.ImageKnife.getImageKnifeContext().resourceManager.getString($r(reColor) + ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager).getString($r(reColor) .id, (err, color) => { if (!err) { var cos = JSON.stringify(color); 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 03b87dc..aecbc66 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets @@ -18,13 +18,14 @@ import { LoadType } from '../../../../../../../GifWorker' import { parseBufferToFrame } from './parse/GIFParse' import { LogUtil } from '../../utils/LogUtil' import image from '@ohos.multimedia.image' +import { ImageKnifeGlobal } from '../../ImageKnifeGlobal' export class GIFParseImpl implements IParseGif { parseGifs(imageinfo: ArrayBuffer, callback: (data?, err?) => void, worker?,runMainThread?:boolean) { let resolveWorker = worker; LogUtil.log('parseGifs resolveWorker1 is null =' + (resolveWorker == null)) if (!resolveWorker) { - resolveWorker = globalThis.ImageKnife.getGifWorker(); + resolveWorker = ImageKnifeGlobal.getInstance().getImageKnife().getGifWorker(); } LogUtil.log('parseGifs resolveWorker2 is null =' + (resolveWorker == null)) From e7d70fea9d49699993d97f5eeb87ff5d630e8826 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 18 Sep 2023 16:07:31 +0800 Subject: [PATCH 04/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B94=20=E6=9B=B4?= =?UTF-8?q?=E6=94=B9ImageKnife->compress=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../imageknife/compress/CompressBuilder.ets | 42 +++-- .../components/imageknife/compress/Engine.ets | 159 +++++++++--------- .../listener/CompressDataListener.ets | 2 +- .../listener/CompressionPredicate.ets | 2 +- .../compress/listener/OnCompressListener.ets | 6 +- .../compress/listener/OnRenameListener.ets | 2 +- .../compress/provider/CompressAdapter.ets | 2 +- .../provider/DataStringPathProvider.ets | 6 +- .../compress/provider/RecourseProvider.ets | 46 ++--- 9 files changed, 134 insertions(+), 133 deletions(-) diff --git a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets index 6830b98..aa0b5c9 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets @@ -25,13 +25,19 @@ import { ImageKnife } from '../ImageKnife' import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; export class CompressBuilder { - private _mTargetDir: string; + private _mTargetDir: string = ''; private _mLeastCompressSize: number= 100; //KB - private _mRenameListener: OnRenameListener; - private _mCompressListener: OnCompressListener; - private _mCompressionPredicate: CompressionPredicate - private _mStreamProviders: Array; - private _mFocusAlpha: boolean; + private _mRenameListener: OnRenameListener = {reName:()=>{return ''}}; + private _mCompressListener: OnCompressListener={ + start:()=> {}, + onScuccess:(p: PixelMap|null|undefined, path: string)=> {}, + onError:(s: string)=> {} + }; + private _mCompressionPredicate: CompressionPredicate ={ + apply:(path: string)=> { return false } +} + private _mStreamProviders: Array = new Array(); + private _mFocusAlpha: boolean = false; private _outFilePath: string; constructor() { this._mStreamProviders = new Array(); @@ -109,7 +115,7 @@ export class CompressBuilder { if (!this._mTargetDir) { let context:Record = (ImageKnifeGlobal.getInstance().getHapContext() as Record); let path = context.filesDir; - var timestamp = (new Date()).valueOf(); + let timestamp = (new Date()).valueOf(); this._outFilePath = path + "/compress/" + timestamp + (Math.random() * 100).toFixed(0) + ".jpg"; let result = await this.startAsyncCompress(); return result; @@ -120,15 +126,15 @@ export class CompressBuilder { } private async startAsyncCompress():Promise { - let compressPromise = new Promise((resolve, reject) => { + let compressPromise:Promise = new Promise((resolve, reject) => { let compressListener: OnCompressListener = { - start() { + start:()=>{ }, - onScuccess(p: PixelMap, path: string) { + onScuccess:(p: PixelMap|undefined|null, path: string)=> { resolve(path); }, - onError(s: string) { + onError:(s: string)=> { } } @@ -139,7 +145,7 @@ export class CompressBuilder { return; } - for (var i = 0; i < this._mStreamProviders.length; i++) { + for (let i = 0; i < this._mStreamProviders.length; i++) { let element = this._mStreamProviders[i]; let isOpenfilter = false; if (this._mCompressionPredicate) { @@ -172,11 +178,11 @@ export class CompressBuilder { return; } if (this._mRenameListener) { - var name = this._mRenameListener.reName(); + let name = this._mRenameListener.reName(); if (this._outFilePath && name) { - var start = this._outFilePath.lastIndexOf("/") + 1 - var end = this._outFilePath.length; - var replaceStr = this._outFilePath.substring(start, end); + let start = this._outFilePath.lastIndexOf("/") + 1 + let end = this._outFilePath.length; + let replaceStr = this._outFilePath.substring(start, end); this._outFilePath = this._outFilePath.replace(replaceStr, name); } } @@ -184,7 +190,7 @@ export class CompressBuilder { this._mCompressListener.start(); } - for (var i = 0; i < this._mStreamProviders.length; i++) { + for (let i = 0; i < this._mStreamProviders.length; i++) { let element = this._mStreamProviders[i]; let isOpenfilter = false; if (this._mCompressionPredicate) { @@ -203,7 +209,7 @@ export class CompressBuilder { private getImageCacheFile() { let context:Record = (ImageKnifeGlobal.getInstance().getHapContext() as Record) - var timestamp = (new Date()).valueOf(); + let timestamp = (new Date()).valueOf(); this._outFilePath = context.filesDir + "/compress/" + timestamp + (Math.random() * 100).toFixed(0) + ".jpg"; this.startCompress(); } diff --git a/imageknife/src/main/ets/components/imageknife/compress/Engine.ets b/imageknife/src/main/ets/components/imageknife/compress/Engine.ets index a6038e2..986f78a 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/Engine.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/Engine.ets @@ -13,14 +13,15 @@ * limitations under the License. */ -import {OnCompressListener} from '../compress/listener/OnCompressListener' -import {CompressionPredicate} from '../compress/listener/CompressionPredicate' -import {CompressAdapter} from "../compress/provider/CompressAdapter" -import {DataStringPathProvider} from '../compress/provider/DataStringPathProvider' -import {RecourseProvider} from '../compress/provider/RecourseProvider' -import {FileUtils} from '../../cache/FileUtils' +import { OnCompressListener } from '../compress/listener/OnCompressListener' +import { CompressionPredicate } from '../compress/listener/CompressionPredicate' +import { CompressAdapter } from "../compress/provider/CompressAdapter" +import { DataStringPathProvider } from '../compress/provider/DataStringPathProvider' +import { RecourseProvider } from '../compress/provider/RecourseProvider' +import { FileUtils } from '../../cache/FileUtils' import image from "@ohos.multimedia.image" -import fileio from '@ohos.fileio'; +import fs from '@ohos.file.fs'; +import { BusinessError } from '@ohos.base' export class Engine { private mFocusAlpha: boolean; @@ -48,10 +49,10 @@ export class Engine { srcWidth = srcWidth % 2 == 1 ? srcWidth + 1 : srcWidth; srcHeight = srcHeight % 2 == 1 ? srcHeight + 1 : srcHeight; - var longSide = Math.max(srcWidth, srcHeight); - var shortSide = Math.min(srcWidth, srcHeight); + let longSide = Math.max(srcWidth, srcHeight); + let shortSide = Math.min(srcWidth, srcHeight); - var scale = shortSide / longSide; + let scale = shortSide / longSide; if (scale <= 1 && scale > 0.5625) { if (longSide < 1664) { return 1; @@ -72,7 +73,7 @@ export class Engine { compress() { if (this.mCompressAdapter instanceof DataStringPathProvider) { // file - this.mCompressAdapter.openInternal((buffer) => { + this.mCompressAdapter.openInternal({ compressDataListener: (buffer: ArrayBuffer) => { if (!buffer) { if (this.mCompressListener) { this.mCompressListener.onError("file read fail,and date is empty") @@ -83,36 +84,36 @@ export class Engine { return; } - var imageResource = image.createImageSource(buffer as any); + let imageResource: image.ImageSource = image.createImageSource(buffer as any); imageResource.getImageInfo() .then(info => { - var height = info.size.height; - var width = info.size.width; - var computeSize = this.computeSize(width, height); - console.info("Engine compress computeSize:" + computeSize); - let options = { - editable: true, - sampleSize: computeSize, - desiredPixelFormat: image.PixelMapFormat.RGB_565, - } - imageResource.createPixelMap(options) - .then(bitmap => { + let height = info.size.height; + let width = info.size.width; + let computeSize = this.computeSize(width, height); + console.info("Engine compress computeSize:" + computeSize); + let options: image.DecodingOptions = { + editable: true, + sampleSize: computeSize, + desiredPixelFormat: image.PixelMapFormat.RGB_565, + } + imageResource.createPixelMap(options) + .then(bitmap => { + + }) + .catch((error: BusinessError) => { + this.mCompressListener.onError("ptah createPixelMap fail,because error:" + JSON.stringify(error as BusinessError)) + }) + }) - .catch(error => { - this.mCompressListener.onError("ptah createPixelMap fail,because error:" + JSON.stringify(error)) + .catch((error: BusinessError) => { + this.mCompressListener.onError("ptah getImageInfo fail,because error:" + JSON.stringify(error as BusinessError)) }) - - }) - .catch(error => { - this.mCompressListener.onError("ptah getImageInfo fail,because error:" + JSON.stringify(error)) - }) - - }) + } }) } else if (this.mCompressAdapter instanceof RecourseProvider) { // resource - this.mCompressAdapter.openInternal((buffer) => { + this.mCompressAdapter.openInternal({ compressDataListener: (buffer: ArrayBuffer) => { if (!buffer) { if (this.mCompressListener) { this.mCompressListener.onError("resource read fail,and date is empty") @@ -122,86 +123,78 @@ export class Engine { if (!this.checkNeedCompress(buffer)) { return; } - var imageResource = image.createImageSource(buffer as any); + let imageResource: image.ImageSource = image.createImageSource(buffer); imageResource.getImageInfo() .then(info => { - var height = info.size.height; - var width = info.size.width; - var computeSize = this.computeSize(width, height); - let packer = { - format: ["image/jpeg"], - quality: computeSize, - } - var imagePacker = image.createImagePacker(); - imagePacker.packing(imageResource, packer as any, (err,compressBuffer)=>{ - if(err){ - this.mCompressListener.onError("resource packing fail,because error:" + err); + let height = info.size.height; + let width = info.size.width; + let computeSize = this.computeSize(width, height); + let packer: image.PackingOption = { + format: "image/jpeg", + quality: computeSize, } + let imagePacker: image.ImagePacker = image.createImagePacker(); + imagePacker.packing(imageResource, packer, (err, compressBuffer) => { + if (err) { + this.mCompressListener.onError("resource packing fail,because error:" + err); + } - console.log("compressBuffer is null ="+ (compressBuffer==null)); - console.log("compressBuffer is undefined ="+ (compressBuffer == undefined) ); - let dirPath = this.mPath.substring(0, this.mPath.lastIndexOf("/") + 1); - var isDirectory = this.checkDirExist(dirPath); - if (isDirectory) { - this.saveFile(this.mPath, compressBuffer); - this.handResult(compressBuffer, this.mPath); - } else { - fileio.mkdir(dirPath) - .then(() => { + console.log("compressBuffer is null =" + (compressBuffer == null)); + console.log("compressBuffer is undefined =" + (compressBuffer == undefined)); + let dirPath = this.mPath.substring(0, this.mPath.lastIndexOf("/") + 1); + let isDirectory = this.checkDirExist(dirPath); + if (isDirectory) { this.saveFile(this.mPath, compressBuffer); this.handResult(compressBuffer, this.mPath); - }); - } - }) + } else { + fs.mkdir(dirPath) + .then(() => { + this.saveFile(this.mPath, compressBuffer); + this.handResult(compressBuffer, this.mPath); + }); + } + }) }) - }) - + } }) } } private handResult(buffer: ArrayBuffer, path: string) { - var imageRes = image.createImageSource(buffer as any); - let a={ + let imageRes:image.ImageSource = image.createImageSource(buffer); + let a:image.DecodingOptions = { editable: true, } imageRes.createPixelMap(a) .then(bitmap => { - if (this.mCompressListener) { - this.mCompressListener.onScuccess(bitmap, path); - } - }) - .catch(error => { - if (this.mCompressListener) { - this.mCompressListener.onError("buffer generated pixelMap fail,because error:" + JSON.stringify(error)) - } - }) + if (this.mCompressListener) { + this.mCompressListener.onScuccess(bitmap, path); + } + }) + .catch((error:BusinessError) => { + if (this.mCompressListener) { + this.mCompressListener.onError("buffer generated pixelMap fail,because error:" + JSON.stringify(error as BusinessError)) + } + }) } - private checkNeedCompress(buf: ArrayBuffer): boolean{ + private checkNeedCompress(buf: ArrayBuffer): boolean { if (!buf) { return false; } - var length = buf.byteLength / 1024; + let length = buf.byteLength / 1024; return length > this._mLeastCompressSize; } private saveFile(path: string, content: ArrayBuffer) { - FileUtils.getInstance().writeFile(path,content); + FileUtils.getInstance().writeFile(path, content); } - private checkDirExist(dirPath: string): boolean{ - var isExist; - try { - fileio.accessSync(dirPath, 0) - isExist = true; - } catch (e) { - //不符合条件则进入 - isExist = false; - } + private checkDirExist(dirPath: string): boolean { + let isExist:boolean = fs.accessSync(dirPath); return isExist; } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/compress/listener/CompressDataListener.ets b/imageknife/src/main/ets/components/imageknife/compress/listener/CompressDataListener.ets index fc072f7..63e1a86 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/listener/CompressDataListener.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/listener/CompressDataListener.ets @@ -14,5 +14,5 @@ */ export interface CompressDataListener { - (t: T); + compressDataListener:(t: T)=>void; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/compress/listener/CompressionPredicate.ets b/imageknife/src/main/ets/components/imageknife/compress/listener/CompressionPredicate.ets index 79bec3c..ad29877 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/listener/CompressionPredicate.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/listener/CompressionPredicate.ets @@ -17,5 +17,5 @@ * filter out unsupported */ export interface CompressionPredicate { - apply(path: string): boolean; + apply:(path: string)=>boolean; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets b/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets index 87b40d7..ddb34a1 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets @@ -19,13 +19,13 @@ export interface OnCompressListener { /** * compress start */ - start(); + start:()=>void; /** * compress success */ - onScuccess(p: PixelMap, path: string); + onScuccess:(p: PixelMap|undefined|null, path: string)=>void; /** * compress fail */ - onError(s: string); + onError:(s: string)=>void; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/compress/listener/OnRenameListener.ets b/imageknife/src/main/ets/components/imageknife/compress/listener/OnRenameListener.ets index 5be73d7..811a4bf 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/listener/OnRenameListener.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/listener/OnRenameListener.ets @@ -17,5 +17,5 @@ * rename listener */ export interface OnRenameListener { - reName():string; + reName:()=>string; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets b/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets index 7de64b6..31b2ff1 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/provider/CompressAdapter.ets @@ -35,7 +35,7 @@ export abstract class CompressAdapter implements CompressProvider { abstract getRecoursePath(): string; - abstract getPixelMapFormat(): PixelMapFormat; + abstract getPixelMapFormat(): PixelMapFormat | undefined; getFormat(s: string): PixelMapFormat | undefined{ if (!s) { diff --git a/imageknife/src/main/ets/components/imageknife/compress/provider/DataStringPathProvider.ets b/imageknife/src/main/ets/components/imageknife/compress/provider/DataStringPathProvider.ets index 7d75c0e..8bf3554 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/provider/DataStringPathProvider.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/provider/DataStringPathProvider.ets @@ -31,14 +31,14 @@ export class DataStringPathProvider extends CompressAdapter { if (!this.mPath) { throw new Error('DataStringPathProvider error path is empty'); } - var buffer = FileUtils.getInstance().readFilePic(this.mPath); + let buffer = FileUtils.getInstance().readFilePic(this.mPath); this.mData = buffer; if (callback) { - callback(buffer); + callback.compressDataListener(buffer); } } - getPixelMapFormat(): PixelMapFormat{ + getPixelMapFormat(): PixelMapFormat|undefined{ if (!this.mPath) { return PixelMapFormat.NONE; } diff --git a/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets b/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets index b20da93..f1eadc2 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/provider/RecourseProvider.ets @@ -13,29 +13,30 @@ * limitations under the License. */ -import {CompressAdapter, PixelMapFormat} from "../provider/CompressAdapter" -import {CompressDataListener} from "../listener/CompressDataListener" -import {FileTypeUtil} from '../../../imageknife/utils/FileTypeUtil' +import { CompressAdapter, PixelMapFormat } from "../provider/CompressAdapter" +import { CompressDataListener } from "../listener/CompressDataListener" +import { FileTypeUtil } from '../../../imageknife/utils/FileTypeUtil' import { ImageKnifeGlobal } from '../../ImageKnifeGlobal'; import resourceManager from '@ohos.resourceManager'; +import { BusinessError } from '@ohos.base' export class RecourseProvider extends CompressAdapter { private static CHARS: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - private static DEFAULT_RESOURCE_PATH: string= "Resource" + private static DEFAULT_RESOURCE_PATH: string = "Resource" private _mLookup: Uint8Array = new Uint8Array(256); - private _mResourceData: Resource; - private _mPixelMapHeader: string; + private _mResourceData?: Resource = undefined; + private _mPixelMapHeader: string = ''; constructor(s: Resource) { super() this._mResourceData = s; this.mPath = RecourseProvider.DEFAULT_RESOURCE_PATH; - for (var index = 0; index < RecourseProvider.CHARS.length; index++) { + for (let index = 0; index < RecourseProvider.CHARS.length; index++) { this._mLookup[RecourseProvider.CHARS.charCodeAt(index)] = index; } } - getRecoursePath(): string{ + getRecoursePath(): string { return this.mPath; } @@ -44,21 +45,22 @@ export class RecourseProvider extends CompressAdapter { if (!this._mResourceData) { throw Error("compress resource is empty"); } - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance() + .getHapContext() as Record).resourceManager as resourceManager.ResourceManager) .getMediaContent(this._mResourceData.id) .then(data => { let buffer = this.uint8ArrayToBuffer(data); let fileTypeUtil = new FileTypeUtil() this._mPixelMapHeader = fileTypeUtil.getFileType(buffer); - callback(buffer); + callback.compressDataListener(buffer); }) - .catch(err => { - console.log("RecourseProvider openInternal err" + JSON.stringify(err)); + .catch((err: BusinessError) => { + console.log("RecourseProvider openInternal err" + JSON.stringify(err as BusinessError)); }) } - getPixelMapFormat(): PixelMapFormat{ + getPixelMapFormat(): PixelMapFormat|undefined{ if (!this._mPixelMapHeader) { return PixelMapFormat.NONE; } @@ -68,14 +70,14 @@ export class RecourseProvider extends CompressAdapter { * data decode */ decode(base64: string, callback: CompressDataListener) { - let bufferLength = base64.length, - len = base64.length, - i, - p = 0, - encoded1, - encoded2, - encoded3, - encoded4; + let bufferLength: number = base64.length; + let len: number = base64.length; + let i: number = 0; + let p: number = 0; + let encoded1: number = 0; + let encoded2: number = 0; + let encoded3: number = 0; + let encoded4: number = 0; if (base64[base64.length - 1] === '=') { bufferLength--; @@ -100,7 +102,7 @@ export class RecourseProvider extends CompressAdapter { } this.mData = arraybuffer; if (callback) { - callback(arraybuffer); + callback.compressDataListener(arraybuffer); } } From f122a19f403c67cb66742e4f6a3fb18c4ab9d5c7 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 18 Sep 2023 17:32:18 +0800 Subject: [PATCH 05/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B95=20=E6=9B=B4?= =?UTF-8?q?=E6=94=B9ImageKnife->crop=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- imageknife/index.ets | 2 +- .../ets/components/imageknife/crop/Crop.ets | 73 ++++---- .../imageknife/crop/CropCallback.ets | 3 +- .../components/imageknife/crop/CropImage.ets | 15 +- .../imageknife/crop/CropOptions.ets | 11 +- .../imageknife/crop/PixelMapCrop.ets | 159 +++++++++--------- 6 files changed, 136 insertions(+), 127 deletions(-) diff --git a/imageknife/index.ets b/imageknife/index.ets index dcf1bdb..5d0c3ac 100644 --- a/imageknife/index.ets +++ b/imageknife/index.ets @@ -48,7 +48,7 @@ export * from './src/main/ets/components/imageknife/compress/provider/RecoursePr export * from './src/main/ets/components/imageknife/crop/Crop' export * from './src/main/ets/components/imageknife/crop/CropImage' export * from './src/main/ets/components/imageknife/crop/CropOptions' -export {default as PixelMapCrop} from './src/main/ets/components/imageknife/crop/PixelMapCrop' +export * from './src/main/ets/components/imageknife/crop/PixelMapCrop' export * from './src/main/ets/components/imageknife/crop/CropCallback' /** diff --git a/imageknife/src/main/ets/components/imageknife/crop/Crop.ets b/imageknife/src/main/ets/components/imageknife/crop/Crop.ets index cf2a613..fa087f5 100644 --- a/imageknife/src/main/ets/components/imageknife/crop/Crop.ets +++ b/imageknife/src/main/ets/components/imageknife/crop/Crop.ets @@ -15,37 +15,39 @@ import { CropCallback } from './CropCallback' import image from "@ohos.multimedia.image" - +import { BusinessError } from '@ohos.base' export namespace Crop { - export function crop(buf: ArrayBuffer, x: number, y: number, cropWidth: number, cropHeight: number, func?: CropCallback, colorRatio?: number) { + export interface CropSize{ + width:number, + height:number + } + + export function crop(buf: ArrayBuffer, x: number, y: number, cropWidth: number, cropHeight: number, func?: CropCallback, colorRatio?: number) { if (!buf || buf.byteLength <= 0) { console.log("Crop buf is empty"); if (func) { - func("Crop buf is empty", null); + func.cropCallback("Crop buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + let crop:CropCallback = { cropCallback: (error:BusinessError|string, size: CropSize|null) => { if (!size) { - func(error, null) + func?.cropCallback(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; + let pixelMapWidth = size.width; + let pixelMapHeight = size.height; if (x < 0 || x > pixelMapWidth) { - func("Crop error x must be less than pixelMapWidth ", null) + func?.cropCallback("Crop error x must be less than pixelMapWidth ", null) return; } if (y < 0 || y > pixelMapHeight) { - func("Crop error x must be less than pixelMapHeight ", null) + func?.cropCallback("Crop error x must be less than pixelMapHeight ", null) return; } - var options = { + let options: image.DecodingOptions = { editable: true, rotate: 0, desiredSize: { @@ -58,58 +60,57 @@ export namespace Crop { }, } imageSource.createPixelMap(options) - .then((data) => { + .then((data:PixelMap) => { if (colorRatio && colorRatio <= 1) { colorRatioPixelMap(data, pixelMapWidth, pixelMapHeight, colorRatio, func); } else { - func("", data); + func?.cropCallback("", data); } }) - .catch((e) => { - func(e, null); + .catch((e:BusinessError) => { + func?.cropCallback(e, null); }) - }) + } + } + getPixelMapSize(imageSource, crop) } - var colorRatioPixelMap = async (data: any, width: number, height: number, colorRatio: number, func?: CropCallback)=> { + let colorRatioPixelMap = async (data: PixelMap, width: number, height: number, colorRatio: number, func?: CropCallback)=> { if (!data) { - func("colorRatio pixelMap is null", null); + func?.cropCallback("colorRatio pixelMap is null", null); return; } if (colorRatio > 1) { throw new Error("the colorRatio must be <= 1"); } - var buffer = new ArrayBuffer(width * height * 5); - var bytes = new Uint8Array(buffer); - var buffer1B = new ArrayBuffer(width * height * 5); - var bytes1B = new Uint8Array(buffer1B); + let buffer = new ArrayBuffer(width * height * 5); + let bytes = new Uint8Array(buffer); + let buffer1B = new ArrayBuffer(width * height * 5); + let bytes1B = new Uint8Array(buffer1B); - let readPromise = data.readPixelsToBuffer(buffer) + let readPromise:Promise = data.readPixelsToBuffer(buffer) await readPromise; for (let i = 0;i < bytes.length; i++) { bytes1B[i] = bytes[i] * colorRatio; } - let writePromise = data.writeBufferToPixels(buffer1B) + let writePromise:Promise = data.writeBufferToPixels(buffer1B) await writePromise; - func("", data); + func?.cropCallback("", data); } - var getPixelMapSize = (imageSource: any, func: CropCallback<{ - width: number, - height: number - }>)=> { + let getPixelMapSize = (imageSource: image.ImageSource, func: CropCallback)=> { if (!imageSource) { return; } imageSource.getImageInfo((err, value) => { if (err) { - func(err, null) + func.cropCallback(err, null) return; } - var pWidth = value.size.width; - var pHeight = value.size.height; - func('', { width: pWidth, height: pHeight }); + let pWidth = value.size.width; + let pHeight = value.size.height; + func.cropCallback('', { width: pWidth, height: pHeight }); }) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/crop/CropCallback.ets b/imageknife/src/main/ets/components/imageknife/crop/CropCallback.ets index 1f428e5..04b3a70 100644 --- a/imageknife/src/main/ets/components/imageknife/crop/CropCallback.ets +++ b/imageknife/src/main/ets/components/imageknife/crop/CropCallback.ets @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { BusinessError } from '@ohos.base' export interface CropCallback { - (err, data: T) + cropCallback:(err:BusinessError|string, data: T)=>void } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/crop/CropImage.ets b/imageknife/src/main/ets/components/imageknife/crop/CropImage.ets index aa4c682..578d5c4 100644 --- a/imageknife/src/main/ets/components/imageknife/crop/CropImage.ets +++ b/imageknife/src/main/ets/components/imageknife/crop/CropImage.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import {CropOptions} from "../crop/CropOptions"; +import {CropOptions,Size} from "../crop/CropOptions"; @Component export struct CropImage { @@ -35,10 +35,15 @@ export struct CropImage { }) .scale({ x: this._scale, y: this._scale, z: 1.0 }) .gesture(GestureGroup(GestureMode.Parallel, - RotationGesture({ fingers: 1 }).onActionUpdate(event => { - this._rotate = event.angle; - }), PinchGesture({ fingers: 2 }).onActionUpdate(event => { - this._scale = event.scale; + RotationGesture({ fingers: 1 }).onActionUpdate((event?: GestureEvent) => { + if(event != undefined) { + this._rotate = event.angle; + } + }), PinchGesture({ fingers: 2 }).onActionUpdate((event?: GestureEvent) => { + if(event != undefined) { + this._scale = event.scale; + } + }) ).onCancel(() => { console.log("CropImage gesture cancel"); diff --git a/imageknife/src/main/ets/components/imageknife/crop/CropOptions.ets b/imageknife/src/main/ets/components/imageknife/crop/CropOptions.ets index 37e0214..6840094 100644 --- a/imageknife/src/main/ets/components/imageknife/crop/CropOptions.ets +++ b/imageknife/src/main/ets/components/imageknife/crop/CropOptions.ets @@ -12,11 +12,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +export interface Size{ + width: number, + height: number; +} -export class CropOptions { +export interface CropOptions { src: string | PixelMap | Resource; - size: { - width: number, - height: number; - } + size: Size } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets b/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets index 5640e08..b629382 100644 --- a/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets +++ b/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets @@ -15,11 +15,11 @@ import image from "@ohos.multimedia.image" import { Crop } from './Crop' import { CropCallback } from './CropCallback' - +import { BusinessError } from '@ohos.base' @Component struct PixelMapCrop { - @Watch('watchOptions') @Link options: PixelMapCrop.Options; - @Watch('watchCropTap') @Prop cropTap: boolean; + @Watch('watchOptions') @Link options: Options; + @Watch('watchCropTap') @Prop cropTap: boolean = false; @State bWidth: number = 0; @State bHeight: number = 0; @State cWidth: number = 0; @@ -305,59 +305,60 @@ struct PixelMapCrop { // .backgroundColor('#33000000') .onReady(() => { }) - .onTouch((event: TouchEvent) => { - if (event.type === TouchType.Down) { - // 手指按下 - this.downX = event.touches[0].x; - this.downY = event.touches[0].y; + .onTouch((event?: TouchEvent) => { + if(event != undefined) { + if (event.type === TouchType.Down) { + // 手指按下 + this.downX = event.touches[0].x; + this.downY = event.touches[0].y; - this.lastMoveX = event.touches[0].x; - this.lastMoveY = event.touches[0].y; + this.lastMoveX = event.touches[0].x; + this.lastMoveY = event.touches[0].y; - this.belongRegion() + this.belongRegion() + } + if (event.type === TouchType.Up) { + // 手指放开 + this.downX = 0; + this.downY = 0; + + this.moveX = 0; + this.moveY = 0; + + this.resetTouch(); + + } + if (event.type === TouchType.Move) { + // 手指移动 + this.moveX = event.touches[0].x; + this.moveY = event.touches[0].y; + // 每次移动的delta数据 + let dx = this.moveX - this.lastMoveX; + let dy = this.moveY - this.lastMoveY; + + console.log('PMC this.isTopLeftAreaTouch =' + this.isTopLeftAreaTouch + ' this.isTopRightAreaTouch =' + this.isTopRightAreaTouch + + ' this.isBottomLeftAreaTouch=' + this.isBottomLeftAreaTouch + ' isBottomRightAreaTouch' + this.isBottomRightAreaTouch + + ' dx =' + dx + ' dy =' + dy) + + this.touchLeftTopArea(dx, dy) + this.touchRightTopArea(dx, dy) + this.touchLeftBottomArea(dx, dy) + this.touchRightBottomArea(dx, dy) + + + this.touchTopLineArea(dx, dy) + this.touchLeftLineArea(dx, dy) + this.touchRightLineArea(dx, dy) + this.touchBottomLineArea(dx, dy) + + this.touchMoveCropBox(dx, dy); + + this.lastMoveX = event.touches[0].x + this.lastMoveY = event.touches[0].y + + } } - if (event.type === TouchType.Up) { - // 手指放开 - this.downX = 0; - this.downY = 0; - - this.moveX = 0; - this.moveY = 0; - - this.resetTouch(); - - } - if (event.type === TouchType.Move) { - // 手指移动 - this.moveX = event.touches[0].x; - this.moveY = event.touches[0].y; - // 每次移动的delta数据 - let dx = this.moveX - this.lastMoveX; - let dy = this.moveY - this.lastMoveY; - - console.log('PMC this.isTopLeftAreaTouch =' + this.isTopLeftAreaTouch + ' this.isTopRightAreaTouch =' + this.isTopRightAreaTouch - + ' this.isBottomLeftAreaTouch=' + this.isBottomLeftAreaTouch + ' isBottomRightAreaTouch' + this.isBottomRightAreaTouch - + ' dx =' + dx + ' dy =' + dy) - - this.touchLeftTopArea(dx, dy) - this.touchRightTopArea(dx, dy) - this.touchLeftBottomArea(dx, dy) - this.touchRightBottomArea(dx, dy) - - - this.touchTopLineArea(dx, dy) - this.touchLeftLineArea(dx, dy) - this.touchRightLineArea(dx, dy) - this.touchBottomLineArea(dx, dy) - - this.touchMoveCropBox(dx, dy); - - this.lastMoveX = event.touches[0].x - this.lastMoveY = event.touches[0].y - - } - }) } @@ -785,46 +786,46 @@ struct PixelMapCrop { } } -namespace PixelMapCrop { - - - export class Options { - width: number; - height: number; - pixelMap: PixelMap; +export class Options { + width: number = 0; + height: number = 0; + pixelMap?: PixelMap = undefined; // 是否需要绘制线 - hasGuideLine: boolean; - pixelBuffer: ArrayBuffer; + hasGuideLine: boolean = false; + pixelBuffer: ArrayBuffer = new ArrayBuffer(0); // 展示pixel宽度 - pixelWidth: number; + pixelWidth: number = 0; // 展示pixel高度 - pixelHeight: number; + pixelHeight: number = 0; // 缩放scale:center-inside类型缩放的比例 - pixelScale: number; + pixelScale: number = 1; // 用户裁剪后的回调 - cropFunction: Function; + cropFunction: (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number) => void = (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number)=>{}; // 本地裁剪框 回调 - cropAction: Function; + cropAction: (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number) =>void = (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number)=>{}; constructor() { } // 裁剪动作 - setCropFunction(crop: (error, pixelmap, sx, sy) => void) { + setCropFunction(crop: (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number) => void) { this.cropFunction = crop; - this.cropAction = (topLeftPoint, bottomRightPoint, scaleInside) => { - let dx = vp2px(1) * topLeftPoint[0] * 1.0 / scaleInside; - let dy = vp2px(1) * topLeftPoint[1] * 1.0 / scaleInside; - let sx = vp2px(1) * (bottomRightPoint[0] - topLeftPoint[0]) * 1.0 / scaleInside; - let sy = vp2px(1) * (bottomRightPoint[1] - topLeftPoint[1]) * 1.0 / scaleInside; - Crop.crop(this.pixelBuffer, dx, dy, sx, sy, (error, pixelmap) => { - this.cropFunction(error, pixelmap, sx, sy) + this.cropAction = (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number) => { + let dx:number = vp2px(1) * topLeftPoint[0] * 1.0 / scaleInside; + let dy:number = vp2px(1) * topLeftPoint[1] * 1.0 / scaleInside; + let sx:number = vp2px(1) * (bottomRightPoint[0] - topLeftPoint[0]) * 1.0 / scaleInside; + let sy:number = vp2px(1) * (bottomRightPoint[1] - topLeftPoint[1]) * 1.0 / scaleInside; + Crop.crop(this.pixelBuffer, dx, dy, sx, sy, { + cropCallback: (error: BusinessError | string, pixelmap: PixelMap | null) => { + this.cropFunction(error, pixelmap, sx, sy) + } }, 1); + } return this; @@ -857,7 +858,7 @@ namespace PixelMapCrop { //数据赋值 this.pixelBuffer = buffer; - let imageSource = image.createImageSource(buffer as any); + let imageSource:image.ImageSource = image.createImageSource(buffer); imageSource.getImageInfo().then((imageInfo) => { //获取宽高 @@ -879,7 +880,7 @@ namespace PixelMapCrop { this.pixelWidth = imageInfo.size.width * scaleInside; this.pixelHeight = imageInfo.size.height * scaleInside; - let options = { + let options:image.DecodingOptions = { editable: true, rotate: 0, desiredSize: { @@ -887,7 +888,7 @@ namespace PixelMapCrop { height: imageInfo.size.height * scaleInside, } } - imageSource.createPixelMap(options).then((pixelmap) => { + imageSource.createPixelMap(options).then((pixelmap:PixelMap) => { this.pixelMap = pixelmap; if (readyCrop) { readyCrop(); @@ -898,6 +899,6 @@ namespace PixelMapCrop { } } -} -export default PixelMapCrop; + + From 2c2dacb367c7c41067bc0e092c39bc4259232f2f Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 18 Sep 2023 18:31:38 +0800 Subject: [PATCH 06/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B96=20=E6=9B=B4?= =?UTF-8?q?=E6=94=B9ImageKnife->pngj=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- entry/src/main/ets/pages/cropImagePage2.ets | 9 +++---- .../imageknife/crop/PixelMapCrop.ets | 2 +- .../pngj/{PngCallback.ets => PngCallback.ts} | 2 +- .../components/imageknife/pngj/PngReader.ets | 8 +++---- .../imageknife/pngj/{Pngj.ets => Pngj.ts} | 24 +++++++++---------- .../imageknife/pngj/entry/ImageInfo.ets | 2 +- 6 files changed, 24 insertions(+), 23 deletions(-) rename imageknife/src/main/ets/components/imageknife/pngj/{PngCallback.ets => PngCallback.ts} (93%) rename imageknife/src/main/ets/components/imageknife/pngj/{Pngj.ets => Pngj.ts} (85%) diff --git a/entry/src/main/ets/pages/cropImagePage2.ets b/entry/src/main/ets/pages/cropImagePage2.ets index c65273b..8bc2893 100644 --- a/entry/src/main/ets/pages/cropImagePage2.ets +++ b/entry/src/main/ets/pages/cropImagePage2.ets @@ -17,17 +17,18 @@ import { CropImage } from '@ohos/imageknife' import { CropOptions } from '@ohos/imageknife' import { Crop } from '@ohos/imageknife' import { RecourseProvider } from '@ohos/imageknife' +import { PixelMapCropNameSpace } from '@ohos/imageknife' import { PixelMapCrop } from '@ohos/imageknife' import { CropCallback } from '@ohos/imageknife' import { FileUtils } from '@ohos/imageknife' import { ImageKnifeGlobal } from '@ohos/imageknife' - +import { BusinessError } from '@ohos.base' @Entry @Component export struct CropImagePage2 { - @State options1: PixelMapCrop.Options = new PixelMapCrop.Options(); + @State options1: Options = new Options(); @State cropTap: boolean = false; @State width1: number = 0; @@ -46,10 +47,10 @@ export struct CropImagePage2 { .getMediaContent($r('app.media.bmpSample').id) .then(data => { let arrayBuffer = FileUtils.getInstance().uint8ArrayToBuffer(data); - let optionx = new PixelMapCrop.Options(); + let optionx = new Options(); optionx.setWidth(800) .setHeight(800) - .setCropFunction((err, pixelmap, sx, sy) => { + .setCropFunction((err:BusinessError, pixelmap:PixelMap, sx:number, sy:number) => { console.log('PMC setCropFunction callback') if (err) { console.error('PMC crop err =' + err) diff --git a/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets b/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets index b629382..ca6c4c4 100644 --- a/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets +++ b/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets @@ -802,7 +802,7 @@ export class Options { pixelScale: number = 1; // 用户裁剪后的回调 - cropFunction: (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number) => void = (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number)=>{}; + cropFunction: (error:BusinessError|string, pixelmap:PixelMap, sx:number, sy:number) => void = (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number)=>{}; // 本地裁剪框 回调 cropAction: (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number) =>void = (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number)=>{}; diff --git a/imageknife/src/main/ets/components/imageknife/pngj/PngCallback.ets b/imageknife/src/main/ets/components/imageknife/pngj/PngCallback.ts similarity index 93% rename from imageknife/src/main/ets/components/imageknife/pngj/PngCallback.ets rename to imageknife/src/main/ets/components/imageknife/pngj/PngCallback.ts index 54d0bbd..3d3b297 100644 --- a/imageknife/src/main/ets/components/imageknife/pngj/PngCallback.ets +++ b/imageknife/src/main/ets/components/imageknife/pngj/PngCallback.ts @@ -14,5 +14,5 @@ */ export interface PngCallback{ - (sender:R, receover:T) + pngCallback: (sender:R, receover:T)=>void } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/pngj/PngReader.ets b/imageknife/src/main/ets/components/imageknife/pngj/PngReader.ets index 26c2934..45592fd 100644 --- a/imageknife/src/main/ets/components/imageknife/pngj/PngReader.ets +++ b/imageknife/src/main/ets/components/imageknife/pngj/PngReader.ets @@ -12,16 +12,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {Closeable} from "/imageknife/pngj/io/Closeable" -import {ImageInfo} from "/imageknife/pngj/entry/ImageInfo" +import {Closeable} from "./io/Closeable" +import {ImageInfo} from "./entry/ImageInfo" export class PngReader implements Closeable { private static LOG_TAG: string= "PngReader"; private static MAX_TOTAL_BYTES_READ_DEFAULT: number= 901001001; private static MAX_BYTES_METADATA_DEFAULT: number= 5024024; private static MAX_CHUNK_SIZE_SKIP: number= 2024024; - public imgInfo: ImageInfo; - public interlaced: boolean; + public imgInfo: ImageInfo = new ImageInfo(0,0,0,false,false,false); + public interlaced: boolean = false; constructor(shouldCloseStream: boolean) { diff --git a/imageknife/src/main/ets/components/imageknife/pngj/Pngj.ets b/imageknife/src/main/ets/components/imageknife/pngj/Pngj.ts similarity index 85% rename from imageknife/src/main/ets/components/imageknife/pngj/Pngj.ets rename to imageknife/src/main/ets/components/imageknife/pngj/Pngj.ts index 16f03c6..fb94dfe 100644 --- a/imageknife/src/main/ets/components/imageknife/pngj/Pngj.ets +++ b/imageknife/src/main/ets/components/imageknife/pngj/Pngj.ts @@ -13,20 +13,20 @@ * limitations under the License. */ import {UPNG} from '../../3rd_party/upng/UPNG'; -import {PngCallback} from '../pngj/PngCallback'; +import {PngCallback} from './PngCallback'; import image from '@ohos.multimedia.image'; import resourceManager from '@ohos.resourceManager'; import ArkWorker from '@ohos.worker' - +import { BusinessError } from '@ohos.base' export class Pngj { - readPngImageInfo(arraybuffer: ArrayBuffer, callback:PngCallback) { - let imageSource = image.createImageSource(arraybuffer as any); + readPngImageInfo(arraybuffer: ArrayBuffer, callback:PngCallback) { + let imageSource:image.ImageSource = image.createImageSource(arraybuffer); if (imageSource != undefined){ - imageSource.getImageInfo((err, value) => { + imageSource.getImageInfo((err:BusinessError, value:image.ImageInfo) => { if (err) { return; } - callback(arraybuffer, value); + callback.pngCallback(arraybuffer, value); }); } @@ -47,19 +47,19 @@ export class Pngj { */ readPngImage(pngBuffer: ArrayBuffer, callback:PngCallback) { var png = UPNG.decode(pngBuffer); - callback(pngBuffer, png) + callback.pngCallback(pngBuffer, png) } writePngWithString(addInfo:string, pngBuffer: ArrayBuffer,callback:PngCallback) { var pngDecode = UPNG.decode(pngBuffer); var newPng = UPNG.encodeWithString(addInfo, UPNG.toRGBA8(pngDecode), pngDecode.width, pngDecode.height, 0) - callback(pngBuffer, newPng); + callback.pngCallback(pngBuffer, newPng); } writePng(pngBuffer: ArrayBuffer,callback:PngCallback) { var pngDecode = UPNG.decode(pngBuffer); var newPng = UPNG.encode(UPNG.toRGBA8(pngDecode), pngDecode.width, pngDecode.height, 0) - callback(pngBuffer, newPng); + callback.pngCallback(pngBuffer, newPng); } readPngImageAsync(worker: any, pngBuffer: ArrayBuffer, callback: PngCallback) { @@ -79,7 +79,7 @@ export class Pngj { var data = e.data; switch (data.type) { case 'readPngImageAsync': - callback(data.receiver, data.data) + callback.pngCallback(data.receiver, data.data) break; default: break @@ -107,7 +107,7 @@ export class Pngj { var data = e.data; switch (data.type) { case 'writePngWithStringAsync': - callback(data.receiver, data.data) + callback.pngCallback(data.receiver, data.data) break; default: break @@ -137,7 +137,7 @@ export class Pngj { var data = e.data; switch (data.type) { case 'writePngAsync': - callback(data.receiver, data.data) + callback.pngCallback(data.receiver, data.data) break; default: break diff --git a/imageknife/src/main/ets/components/imageknife/pngj/entry/ImageInfo.ets b/imageknife/src/main/ets/components/imageknife/pngj/entry/ImageInfo.ets index 9de32ec..a6bf73b 100644 --- a/imageknife/src/main/ets/components/imageknife/pngj/entry/ImageInfo.ets +++ b/imageknife/src/main/ets/components/imageknife/pngj/entry/ImageInfo.ets @@ -162,7 +162,7 @@ export class ImageInfo { return true; if (obj == null) return false; - var other = obj; + let other = obj; if (this.alpha != other.alpha) return false; if (this.bitDepth != other.bitDepth) From 50116741ea75d3d8f191c27ababfaabaff95e276 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 18 Sep 2023 18:53:29 +0800 Subject: [PATCH 07/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B97=20pngTest?= =?UTF-8?q?=E5=92=8C=E9=83=A8=E5=88=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- entry/src/main/ets/pages/pngjTestCasePage.ets | 16 +++++----- .../components/imageknife/entry/ArcPoint.ets | 4 +-- .../imageknife/entry/PixelEntry.ets | 12 +++---- .../imageknife/interface/DataCallBack.ets | 2 +- .../interface/IAllCacheInfoCallback.ets | 32 +++++++++---------- .../requestmanage/RequestManager.ets | 2 +- 6 files changed, 34 insertions(+), 34 deletions(-) diff --git a/entry/src/main/ets/pages/pngjTestCasePage.ets b/entry/src/main/ets/pages/pngjTestCasePage.ets index 5ebbd07..b2856d4 100644 --- a/entry/src/main/ets/pages/pngjTestCasePage.ets +++ b/entry/src/main/ets/pages/pngjTestCasePage.ets @@ -71,10 +71,10 @@ struct PngjTestCasePage { if (!this.pngdecodeRun1) { this.pngdecodeRun1 = true; let pngj = new Pngj(); - pngj.readPngImageInfo(this.pngSource1, (sender, value) => { + pngj.readPngImageInfo(this.pngSource1,{pngCallback: (sender, value) => { this.hint1 = JSON.stringify(value); this.pngdecodeRun1 = false; - }) + }}) } else { this.hint7 = '已经在执行了,请稍等' @@ -118,12 +118,12 @@ struct PngjTestCasePage { type: 'classic', name: 'readPngImageAsync' }) - pngj.readPngImageAsync(png_worker, this.pngSource1, (sender, value) => { + pngj.readPngImageAsync(png_worker, this.pngSource1, {pngCallback: (sender, value) => { this.pngSource1 = sender this.hint2 = 'img with=' + value.width + ' img height=' + value.height + ' img depth=' + value.depth + ' img ctype=' + value.ctype this.pngdecodeRun2 = false; - }) + }}) } else { this.hint8 = '已经在执行了,请稍等' @@ -163,7 +163,7 @@ struct PngjTestCasePage { type: 'classic', name: 'writePngWithStringAsync' }) - pngj.writePngWithStringAsync(png_worker, 'hello world', this.pngSource3, (sender, value) => { + pngj.writePngWithStringAsync(png_worker, 'hello world', this.pngSource3, {pngCallback: (sender, value) => { this.pngSource3 = sender FileUtils.getInstance().createFileProcess( this.rootFolder + '/pngj', @@ -172,7 +172,7 @@ struct PngjTestCasePage { let png1 = new Uint8Array(value) this.hint3 = 'png写入后长度' + png1.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng.png' + '保存后使用2进制查看数据是否新增' this.pngdecodeRun3 = false; - }) + }}) } else { this.hint9 = '已经在执行了,请稍等' } @@ -212,7 +212,7 @@ struct PngjTestCasePage { type: 'classic', name: 'writePngAsync' }) - pngj.writePngAsync(png_worker, this.pngSource4, (sender, value) => { + pngj.writePngAsync(png_worker, this.pngSource4,{pngCallback: (sender, value) => { this.pngSource4 = sender FileUtils.getInstance().createFileProcess( this.rootFolder + '/pngj', @@ -221,7 +221,7 @@ struct PngjTestCasePage { let png2 = new Uint8Array(value) this.hint4 = 'png2未写入长度' + png2.byteLength + '目录文件:' + this.rootFolder + '/pngj/newPng2.png' + '保存后使用2进制查看数据是否新增' this.pngdecodeRun4 = false; - }) + }}) } else { this.hint10 = '已经在执行了,请稍等' } diff --git a/imageknife/src/main/ets/components/imageknife/entry/ArcPoint.ets b/imageknife/src/main/ets/components/imageknife/entry/ArcPoint.ets index 1754f7f..a94c90c 100644 --- a/imageknife/src/main/ets/components/imageknife/entry/ArcPoint.ets +++ b/imageknife/src/main/ets/components/imageknife/entry/ArcPoint.ets @@ -14,8 +14,8 @@ */ export class ArcPoint { - private x: number; - private y: number; + private x: number = 0; + private y: number = 0; constructor(x: number, y: number) { this.y = y; diff --git a/imageknife/src/main/ets/components/imageknife/entry/PixelEntry.ets b/imageknife/src/main/ets/components/imageknife/entry/PixelEntry.ets index b14b30d..1f2f871 100644 --- a/imageknife/src/main/ets/components/imageknife/entry/PixelEntry.ets +++ b/imageknife/src/main/ets/components/imageknife/entry/PixelEntry.ets @@ -13,12 +13,12 @@ * limitations under the License. */ export class PixelEntry { - a: number; - b: number; - r: number; - g: number; - f: number; - pixel: number; + a: number = 0; + b: number = 0; + r: number = 0; + g: number = 0; + f: number = 0; + pixel: number = 0; public toString(): string { return "PixelEntry a:" + this.a + ";b:" + this.b + ";r:" + this.r + ";g:" + this.g + ";f:" + this.f; diff --git a/imageknife/src/main/ets/components/imageknife/interface/DataCallBack.ets b/imageknife/src/main/ets/components/imageknife/interface/DataCallBack.ets index 0ccd3ba..5fee466 100644 --- a/imageknife/src/main/ets/components/imageknife/interface/DataCallBack.ets +++ b/imageknife/src/main/ets/components/imageknife/interface/DataCallBack.ets @@ -14,5 +14,5 @@ */ export interface DataCallBack { - callback(data: T); + callback:(data: T)=>void; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets b/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets index 9643f5f..267daeb 100644 --- a/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets +++ b/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets @@ -14,24 +14,24 @@ */ import {ImageKnifeData} from "../../imageknife/ImageKnifeData" - +export interface MemoryCacheInfo{ + key: string, + data: ImageKnifeData +} +export interface ResourceCacheInfo{ + path: string, + key: string +} +export interface DataCacheInfo{ + path: string, + key: string +} export class AllCacheInfo { - memoryCacheInfo: { - key: string, - data: ImageKnifeData - } - - resourceCacheInfo: { - path: string, - key: string - } - - dataCacheInfo: { - path: string, - key: string - } + memoryCacheInfo: MemoryCacheInfo + resourceCacheInfo: ResourceCacheInfo + dataCacheInfo: DataCacheInfo } export interface IAllCacheInfoCallback { - (cacheInfo: AllCacheInfo); + callback :(cacheInfo: AllCacheInfo)=>void; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets index 4f293e2..f96ac23 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets @@ -121,7 +121,7 @@ export class RequestManager { key: SparkMD5.hashBinary(this.options.generateDataKey), path: this.mDiskCacheProxy.getCachePath() + SparkMD5.hashBinary(this.options.generateDataKey) } - this.options.allCacheInfoCallback(allCacheInfo) + this.options.allCacheInfoCallback.callback(allCacheInfo) } } catch (err) { LogUtil.log("after err =" + err) From af84eb8ab49daff9ecd2ba8b71741b840dccb962 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Tue, 19 Sep 2023 10:57:52 +0800 Subject: [PATCH 08/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B98=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife->holder/interface/=E9=83=A8=E5=88=86utils?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../components/imageknife/RequestOption.ets | 12 +++---- .../imageknife/holder/ErrorHolderManager.ets | 31 ++++++++++--------- .../imageknife/holder/PlaceHolderManager.ets | 30 +++++++++--------- .../imageknife/holder/RetryHolderManager.ets | 26 ++++++++-------- .../interface/IAllCacheInfoCallback.ets | 2 +- .../imageknife/interface/IParseImage.ets | 8 ++--- .../imageknife/utils/FileTypeUtil.ets | 2 +- .../imageknife/utils/ParseImageUtil.ets | 12 +++---- .../imageknife/utils/svg/SVGParseImpl.ets | 5 ++- 9 files changed, 66 insertions(+), 62 deletions(-) diff --git a/imageknife/src/main/ets/components/imageknife/RequestOption.ets b/imageknife/src/main/ets/components/imageknife/RequestOption.ets index 8d2a77f..abdeace 100644 --- a/imageknife/src/main/ets/components/imageknife/RequestOption.ets +++ b/imageknife/src/main/ets/components/imageknife/RequestOption.ets @@ -370,7 +370,7 @@ export class RequestOption { } // 占位图解析成功 - placeholderOnComplete(imageKnifeData: ImageKnifeData) { + placeholderOnComplete = (imageKnifeData: ImageKnifeData)=> { LogUtil.log("placeholderOnComplete has called!"); LogUtil.log("Main Image is Ready:" + this.loadMainReady); if (!this.loadMainReady && !(this.loadErrorReady || this.loadRetryReady) && !this.loadThumbnailReady) { @@ -380,7 +380,7 @@ export class RequestOption { } // 占位图解析失败 - placeholderOnError(error) { + placeholderOnError = (error)=>{ LogUtil.log("占位图解析失败 error =" + error) } @@ -399,7 +399,7 @@ export class RequestOption { } // 加载失败 占位图解析成功 - errorholderOnComplete(imageKnifeData: ImageKnifeData) { + errorholderOnComplete = (imageKnifeData: ImageKnifeData)=> { // 如果有错误占位图 先解析并保存在RequestOption中 等到加载失败时候进行调用 this.errorholderData = imageKnifeData; if (this.loadErrorReady) { @@ -408,18 +408,18 @@ export class RequestOption { } //加载失败 占位图解析失败 - errorholderOnError(error) { + errorholderOnError = (error)=> { LogUtil.log("失败占位图解析失败 error =" + error) } - retryholderOnComplete(imageKnifeData: ImageKnifeData) { + retryholderOnComplete = (imageKnifeData: ImageKnifeData)=>{ this.retryholderData = imageKnifeData; if (this.loadRetryReady) { this.retryholderFunc.asyncSuccess(imageKnifeData) } } - retryholderOnError(error) { + retryholderOnError = (error)=>{ LogUtil.log("重试占位图解析失败 error =" + error) } diff --git a/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets b/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets index a195e7a..b7639c5 100644 --- a/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets +++ b/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets @@ -18,12 +18,13 @@ import { FileTypeUtil } from '../../imageknife/utils/FileTypeUtil' import { ImageKnifeData, ImageKnifeType } from '../ImageKnifeData' import { ParseImageUtil } from '../utils/ParseImageUtil' import { SupportFormat } from '../utils/FileTypeUtil' -import { SVGParseImpl } from '../utils/svg/SVGParseImpl' +import { SVGParseImpl,Size } from '../utils/svg/SVGParseImpl' import { ParseResClient } from '../resourcemanage/ParseResClient' import {LogUtil} from '../../imageknife/utils/LogUtil' import image from '@ohos.multimedia.image' +import { BusinessError } from '@ohos.base' -export class ErrorHolderManager { +export class ErrorHolderManager { private options: RequestOption; constructor(option: RequestOption) { @@ -31,16 +32,16 @@ export class ErrorHolderManager { } static execute(option: RequestOption) { - let manager = new ErrorHolderManager(option); - return new Promise(manager.process.bind(manager)) - .then(option.errorholderOnComplete.bind(option)).catch(option.errorholderOnError.bind(option)); + let manager:ErrorHolderManager = new ErrorHolderManager(option); + return new Promise(manager.process) + .then(option.errorholderOnComplete).catch(option.errorholderOnError); } - process(onComplete, onError) { + process = (onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void)=>{ this.displayErrorholder(onComplete, onError); } - private displayErrorholder(onComplete, onError) { + private displayErrorholder(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("displayErrorholder") if ((typeof (this.options.errorholderSrc as image.PixelMap).isEditable) == 'boolean') { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, this.options.errorholderSrc as PixelMap) @@ -51,9 +52,9 @@ export class ErrorHolderManager { let res = this.options.errorholderSrc as Resource; if (typeof res.id != 'undefined' && typeof res.id != 'undefined') { let resourceFetch = new ParseResClient(); - let suc = (arraybuffer) => { - let fileTypeUtil = new FileTypeUtil(); - let typeValue = fileTypeUtil.getFileType(arraybuffer); + let suc = (arraybuffer:ArrayBuffer) => { + let fileTypeUtil:FileTypeUtil = new FileTypeUtil(); + let typeValue:string = fileTypeUtil.getFileType(arraybuffer); switch (typeValue) { case SupportFormat.svg: this.svgProcess(onComplete, onError, arraybuffer, typeValue) @@ -78,18 +79,18 @@ export class ErrorHolderManager { } } - private svgProcess(onComplete, onError, arraybuffer, typeValue) { - let svgParseImpl = new SVGParseImpl() - let size = { width: this.options.size.width, height: this.options.size.height } + private svgProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string) { + let svgParseImpl:SVGParseImpl = new SVGParseImpl() + let size:Size = { width: this.options.size.width, height: this.options.size.height } svgParseImpl.parseSvg(arraybuffer, size).then((value: PixelMap) => { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value) onComplete(imageKnifeData) - }).catch(err => { + }).catch((err:BusinessError) => { onError(err) }) } - private mediaImageProcess(onComplete, onError, arraybuffer, typeValue) { + private mediaImageProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string) { let parseImageUtil = new ParseImageUtil() let success = (value: PixelMap) => { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value) diff --git a/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets b/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets index 434520c..30a0caf 100644 --- a/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets +++ b/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets @@ -20,12 +20,12 @@ import {ImageKnifeData,ImageKnifeType} from "../ImageKnifeData" import {ParseImageUtil} from '../utils/ParseImageUtil' import {ParseResClient} from '../resourcemanage/ParseResClient' import { SupportFormat } from '../utils/FileTypeUtil' -import { SVGParseImpl } from '../utils/svg/SVGParseImpl' +import { SVGParseImpl,Size} from '../utils/svg/SVGParseImpl' import {LogUtil} from '../../imageknife/utils/LogUtil' import resourceManager from '@ohos.resourceManager'; import image from "@ohos.multimedia.image" - -export class PlaceHolderManager { +import { BusinessError } from '@ohos.base' +export class PlaceHolderManager { private options: RequestOption; constructor(option: RequestOption) { @@ -33,16 +33,16 @@ export class PlaceHolderManager { } static execute(option: RequestOption) { - let manager = new PlaceHolderManager(option); - return new Promise(manager.process.bind(manager)) - .then(option.placeholderOnComplete.bind(option)).catch(option.placeholderOnError.bind(option)); + let manager:PlaceHolderManager = new PlaceHolderManager(option); + return new Promise(manager.process) + .then(option.placeholderOnComplete).catch(option.placeholderOnError); } - process(onComplete, onError) { + process = (onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void)=>{ this.displayPlaceholder(onComplete, onError); } - private displayPlaceholder(onComplete, onError) { + private displayPlaceholder(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void){ LogUtil.log("displayPlaceholder") if ((typeof (this.options.placeholderSrc as image.PixelMap).isEditable) == 'boolean') { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, this.options.placeholderSrc as PixelMap) @@ -53,7 +53,7 @@ export class PlaceHolderManager { let res = this.options.placeholderSrc as Resource; if (typeof res.id != 'undefined' && typeof res.id != 'undefined') { let resourceFetch = new ParseResClient(); - let suc = (arraybuffer) => { + let suc = (arraybuffer:ArrayBuffer) => { let fileTypeUtil = new FileTypeUtil(); let typeValue = fileTypeUtil.getFileType(arraybuffer); switch (typeValue) { @@ -82,19 +82,19 @@ export class PlaceHolderManager { - private svgProcess(onComplete, onError, arraybuffer, typeValue) { - let svgParseImpl = new SVGParseImpl() - let size = { width: this.options.size.width, height: this.options.size.height } + private svgProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string) { + let svgParseImpl:SVGParseImpl = new SVGParseImpl() + let size:Size = { width: this.options.size.width, height: this.options.size.height } svgParseImpl.parseSvg(arraybuffer, size).then((value: PixelMap) => { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value) onComplete(imageKnifeData) - }).catch(err => { + }).catch((err:BusinessError) => { onError(err) }) } - private mediaImageProcess(onComplete, onError, arraybuffer, typeValue) { - let parseImageUtil = new ParseImageUtil() + private mediaImageProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string) { + let parseImageUtil:ParseImageUtil = new ParseImageUtil() let success = (value: PixelMap) => { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value) onComplete(imageKnifeData) diff --git a/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets b/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets index 93ee6ea..6a3b98a 100644 --- a/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets +++ b/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets @@ -20,12 +20,12 @@ import {ImageKnifeData,ImageKnifeType} from "../ImageKnifeData" import {ParseImageUtil} from '../utils/ParseImageUtil' import {ParseResClient} from '../resourcemanage/ParseResClient' import { SupportFormat } from '../utils/FileTypeUtil' -import { SVGParseImpl } from '../utils/svg/SVGParseImpl' +import { SVGParseImpl,Size } from '../utils/svg/SVGParseImpl' import {LogUtil} from '../../imageknife/utils/LogUtil' import resourceManager from '@ohos.resourceManager'; import image from "@ohos.multimedia.image" - -export class RetryHolderManager { +import { BusinessError } from '@ohos.base' +export class RetryHolderManager { private options: RequestOption; constructor(option: RequestOption) { @@ -33,16 +33,16 @@ export class RetryHolderManager { } static execute(option: RequestOption) { - let manager = new RetryHolderManager(option); - return new Promise(manager.process.bind(manager)) - .then(option.retryholderOnComplete.bind(option)).catch(option.retryholderOnError.bind(option)); + let manager:RetryHolderManager = new RetryHolderManager(option); + return new Promise(manager.process) + .then(option.retryholderOnComplete).catch(option.retryholderOnError); } - process(onComplete, onError) { + process = (onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void)=>{ this.displayRetryholder(onComplete, onError); } - private displayRetryholder(onComplete, onError) { + private displayRetryholder(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void){ LogUtil.log("displayRetryholder") if ((typeof (this.options.retryholderSrc as image.PixelMap).isEditable) == 'boolean') { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, this.options.placeholderSrc as PixelMap) @@ -53,7 +53,7 @@ export class RetryHolderManager { let res = this.options.retryholderSrc as Resource; if (typeof res.id != 'undefined' && typeof res.id != 'undefined') { let resourceFetch = new ParseResClient(); - let suc = (arraybuffer) => { + let suc = (arraybuffer:ArrayBuffer) => { let fileTypeUtil = new FileTypeUtil(); let typeValue = fileTypeUtil.getFileType(arraybuffer); switch (typeValue) { @@ -82,18 +82,18 @@ export class RetryHolderManager { - private svgProcess(onComplete, onError, arraybuffer, typeValue) { + private svgProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string) { let svgParseImpl = new SVGParseImpl() - let size = { width: this.options.size.width, height: this.options.size.height } + let size:Size = { width: this.options.size.width, height: this.options.size.height } svgParseImpl.parseSvg(arraybuffer, size).then((value: PixelMap) => { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value) onComplete(imageKnifeData) - }).catch(err => { + }).catch( (err:BusinessError) => { onError(err) }) } - private mediaImageProcess(onComplete, onError, arraybuffer, typeValue) { + private mediaImageProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string) { let parseImageUtil = new ParseImageUtil() let success = (value: PixelMap) => { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value) diff --git a/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets b/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets index 267daeb..4e6c7d0 100644 --- a/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets +++ b/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets @@ -26,7 +26,7 @@ export interface DataCacheInfo{ path: string, key: string } -export class AllCacheInfo { +export interface AllCacheInfo { memoryCacheInfo: MemoryCacheInfo resourceCacheInfo: ResourceCacheInfo dataCacheInfo: DataCacheInfo diff --git a/imageknife/src/main/ets/components/imageknife/interface/IParseImage.ets b/imageknife/src/main/ets/components/imageknife/interface/IParseImage.ets index 96024a4..28a9769 100644 --- a/imageknife/src/main/ets/components/imageknife/interface/IParseImage.ets +++ b/imageknife/src/main/ets/components/imageknife/interface/IParseImage.ets @@ -12,8 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -export interface IParseImage { - parseImage(imageinfo:ArrayBuffer, onCompleteFunction, onErrorFunction); - parseImageThumbnail(scale:number, imageinfo:ArrayBuffer, onCompleteFunction, onErrorFunction); +import { BusinessError } from '@ohos.base' +export interface IParseImage { + parseImage:(imageinfo:ArrayBuffer, onCompleteFunction:(value:T)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void)=>void; + parseImageThumbnail:(scale:number, imageinfo:ArrayBuffer, onCompleteFunction:(value:T)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void)=>void; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets index d4ced98..ac87e6f 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets @@ -37,7 +37,7 @@ export class FileTypeUtil { - getFileType(arraybuffer: ArrayBuffer) { + getFileType(arraybuffer: ArrayBuffer):string { let fileType = undefined; if (arraybuffer == null || arraybuffer == undefined || arraybuffer.byteLength <= this.READ_MIN_LENGTH) { return undefined; diff --git a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets index 02d6f52..5c6953e 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets @@ -15,15 +15,15 @@ import type {IParseImage} from '../interface/IParseImage' import image from '@ohos.multimedia.image'; - -export class ParseImageUtil implements IParseImage { - parseImage(imageinfo: ArrayBuffer, onCompleteFunction, onErrorFunction) { +import { BusinessError } from '@ohos.base' +export class ParseImageUtil implements IParseImage { + parseImage(imageinfo: ArrayBuffer, onCompleteFunction:(value:PixelMap)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void) { this.parseImageThumbnail(1, imageinfo, onCompleteFunction, onErrorFunction) } // scale(0,1) - parseImageThumbnail(scale: number, imageinfo: ArrayBuffer, onCompleteFunction, onErrorFunction) { - let imageSource = image.createImageSource(imageinfo as any); // 步骤一:文件转为pixelMap 然后变换 给Image组件 + parseImageThumbnail(scale: number, imageinfo: ArrayBuffer, onCompleteFunction:(value:PixelMap)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void) { + let imageSource:image.ImageSource = image.createImageSource(imageinfo); // 步骤一:文件转为pixelMap 然后变换 给Image组件 imageSource.getImageInfo((err, value) => { if (err) { onErrorFunction(err); @@ -36,7 +36,7 @@ export class ParseImageUtil implements IParseImage { 'width': wValue }; - let opts = { + let opts:image.DecodingOptions = { editable: true, desiredSize: defaultSize }; diff --git a/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets b/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets index 391177c..6d57f64 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets @@ -14,8 +14,11 @@ */ import type {IParseSvg} from'./IParseSvg' import {SVGImageView} from '@ohos/svg' +export interface Size{ + width:number,height:number +} export class SVGParseImpl implements IParseSvg{ - parseSvg(imageinfo: ArrayBuffer,size?:{width:number,height:number}): Promise{ + parseSvg(imageinfo: ArrayBuffer,size?:Size): Promise{ let model = new SVGImageView.SVGImageViewModel(); return model.getSVGPixelMap(new Uint8Array(imageinfo),size); } From a0b6e19f8af349e5730e1781a85f6e5f9c6e53e9 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Tue, 19 Sep 2023 11:34:20 +0800 Subject: [PATCH 09/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B99=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife->networkmanage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../networkmanage/DownloadClient.ets | 4 +- .../imageknife/networkmanage/IDataFetch.ets | 2 +- .../networkmanage/LoadDataShareFileClient.ets | 10 +-- .../networkmanage/LoadLocalFileClient.ets | 6 +- .../networkmanage/NetworkDownloadClient.ets | 82 ++++++++----------- 5 files changed, 43 insertions(+), 61 deletions(-) diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets index 1cc92fb..2ddf334 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import type { IDataFetch } from '../networkmanage/IDataFetch' +import { IDataFetch } from '../networkmanage/IDataFetch' import { RequestOption } from '../RequestOption' import { NetworkDownloadClient } from './NetworkDownloadClient' import { LoadLocalFileClient } from './LoadLocalFileClient' @@ -27,7 +27,7 @@ export class DownloadClient implements IDataFetch { private localFileClient = new LoadLocalFileClient(); private dataShareFileClient = new LoadDataShareFileClient(); - loadData(request: RequestOption, onCompleteFunction, onErrorFunction) { + loadData(request: RequestOption, onCompleteFunction:(img: ArrayBuffer) => void, onErrorFunction: (err: string) => void) { if (typeof request.loadSrc == 'string') { let fileDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; let cacheDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as Record).cacheDir as string diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/IDataFetch.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/IDataFetch.ets index 019d763..1fafeb0 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/IDataFetch.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/IDataFetch.ets @@ -17,5 +17,5 @@ import { RequestOption } from '../RequestOption' // 资源加载接口 export interface IDataFetch { - loadData(request: RequestOption, onComplete: (img: ArrayBuffer) => void, onError: (err: string) => void); + loadData:(request: RequestOption, onComplete: (img: ArrayBuffer) => void, onError: (err: string) => void)=>void; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/LoadDataShareFileClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/LoadDataShareFileClient.ets index 0e69f6f..6ba18ab 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/LoadDataShareFileClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/LoadDataShareFileClient.ets @@ -12,10 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import type { IDataFetch } from '../networkmanage/IDataFetch' +import { IDataFetch } from '../networkmanage/IDataFetch' import { RequestOption } from '../RequestOption' import fs from '@ohos.file.fs'; - +import { BusinessError } from '@ohos.base' export class LoadDataShareFileClient implements IDataFetch { loadData(request: RequestOption, onComplete: (img: ArrayBuffer) => void, onError: (err: string) => void) { @@ -26,13 +26,13 @@ export class LoadDataShareFileClient implements IDataFetch { fs.read(file.fd, buf).then((readLen) => { onComplete(buf); fs.close(file.fd); - }).catch(err => { + }).catch((err:BusinessError) => { onError('LoadDataShareFileClient fs.read err happend uri=' + request.loadSrc + " err.msg=" + err?.message + " err.code=" + err?.code) }) - }).catch(err => { + }).catch((err:BusinessError) => { onError('LoadDataShareFileClient fs.stat err happend uri=' + request.loadSrc + " err.msg=" + err?.message + " err.code=" + err?.code) }) - }).catch(err => { + }).catch((err:BusinessError) => { onError('LoadDataShareFileClient fs.open err happend uri=' + request.loadSrc + " err.msg=" + err?.message + " err.code=" + err?.code) }) } diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/LoadLocalFileClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/LoadLocalFileClient.ets index 23f7030..89240af 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/LoadLocalFileClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/LoadLocalFileClient.ets @@ -13,10 +13,10 @@ * limitations under the License. */ -import type { IDataFetch } from '../networkmanage/IDataFetch' +import { IDataFetch } from '../networkmanage/IDataFetch' import { RequestOption } from '../RequestOption' import { FileUtils } from '../../cache/FileUtils' - +import { BusinessError } from '@ohos.base' export class LoadLocalFileClient implements IDataFetch { loadData(request: RequestOption, onComplete: (img: ArrayBuffer) => void, onError: (err: string) => void) { if (typeof request.loadSrc == 'string') { @@ -26,7 +26,7 @@ export class LoadLocalFileClient implements IDataFetch { } else { onComplete(fileBuffer); } - }).catch(err=>{ + }).catch((err:BusinessError)=>{ onError('LoadLocalFileClient loadLocalFileData Error Msg ='+err?.message) }) diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets index d3cf5ab..5dc5ec7 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/NetworkDownloadClient.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import type { IDataFetch } from '../networkmanage/IDataFetch' +import { IDataFetch } from '../networkmanage/IDataFetch' import { RequestOption } from '../RequestOption' import { SparkMD5 } from '../../3rd_party/sparkmd5/spark-md5' import { FileUtils } from '../../cache/FileUtils' @@ -21,6 +21,7 @@ import loadRequest from '@ohos.request'; import { LogUtil } from '../utils/LogUtil' import { ImageKnifeGlobal } from '../ImageKnifeGlobal' import common from '@ohos.app.ability.common' +import { BusinessError } from '@ohos.base' // 数据加载器 export class NetworkDownloadClient implements IDataFetch { loadData(request: RequestOption, onComplete: (img: ArrayBuffer) => void, onError: (err: string) => void) { @@ -35,23 +36,23 @@ export class NetworkDownloadClient implements IDataFetch { if (FileUtils.getInstance().exist(allpath)) { FileUtils.getInstance().deleteFile(allpath) } - var downloadConfig = { + let downloadConfig:loadRequest.DownloadConfig = { url: (request.loadSrc as string), filePath: allpath, // 允许计费流量下载 enableMetered: true, }; - let loadTask = null; - loadRequest.downloadFile( (ImageKnifeGlobal.getInstance().getHapContext() as common.BaseContext ), downloadConfig).then(downloadTask => { + + loadRequest.downloadFile( (ImageKnifeGlobal.getInstance().getHapContext() as common.BaseContext ), downloadConfig).then((downloadTask:loadRequest.DownloadTask) => { if (downloadTask) { - loadTask = downloadTask; + let loadTask:loadRequest.DownloadTask | null = downloadTask; loadTask.on('progress', (receivedSize, totalSize) => { if (totalSize > 0) { // 并不是所有服务器都会返回totalSize 当没有文件大小的时候,下载进度没有百分比回调,只能知道目前下载了多少数据量 let percent = Math.round(((receivedSize * 1.0) / (totalSize * 1.0)) * 100) if (request.progressFunc) { - request.progressFunc(percent); + request.progressFunc.asyncSuccess(percent); } } }); @@ -63,69 +64,50 @@ export class NetworkDownloadClient implements IDataFetch { onComplete(arraybuffer); FileUtils.getInstance().deleteFileAsync(downloadPath).then(()=>{ LogUtil.log('文件名:'+downloadPath+" 文件删除成功!") - }).catch(err=>{ + }).catch((err:BusinessError)=>{ LogUtil.log('文件名:'+downloadPath+" 文件删除失败!") }); - }).catch(err=>{ - onError('NetworkDownloadClient Read File Async Error Msg='+ err?.message) + }).catch((err:BusinessError)=>{ + onError('NetworkDownloadClient Read File Async Error Msg='+ (err as BusinessError)?.message) }) - - loadTask.off('complete', () => { - - }) - - loadTask.off('pause', () => { - }) - - loadTask.off('remove', () => { - }) - - loadTask.off('progress', () => { - }) - - loadTask.off('fail', () => { - }) - loadTask = null; + if(loadTask != null) { + loadTask.off('complete', () => {}) + loadTask.off('pause', () => {}) + loadTask.off('remove', () => {}) + loadTask.off('progress', () => {}) + loadTask.off('fail', () => {}) + loadTask = null; + } }) - loadTask.on('pause', () => { - }) + loadTask.on('pause', () => {}) - loadTask.on('remove', () => { - }) + loadTask.on('remove', () => {}) loadTask.on('fail', (err) => { onError('NetworkDownloadClient Download task fail err =' + err) - if (loadTask) { - loadTask.remove().then(result => { - loadTask.off('complete', () => { - }) - - loadTask.off('pause', () => { - }) - - loadTask.off('remove', () => { - }) - - loadTask.off('progress', () => { - }) - - loadTask.off('fail', () => { - }) - loadTask = null - }).catch(err => { + if (loadTask!=null) { + loadTask.delete().then(result => { + if(loadTask != undefined) { + loadTask.off('complete', () => {}) + loadTask.off('pause', () => {}) + loadTask.off('remove', () => {}) + loadTask.off('progress', () => {}) + loadTask.off('fail', () => {}) + loadTask = null + } + }).catch((err:BusinessError) => { loadTask = null; console.log('NetworkDownloadClient Download task fail err =' + err); }) } }) - } else { onError('NetworkDownloadClient downloadTask dismiss!') } }) - .catch((err) => { + .catch((err:BusinessError)=> { onError("下载子系统download错误捕获,error=" + err.message); }) } From 76ab03262fc6f7a585a685e222e77ba3e8d81e74 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Tue, 19 Sep 2023 16:29:48 +0800 Subject: [PATCH 10/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B910=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife->requestmanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../components/imageknife/RequestOption.ets | 21 +-- .../interface/IAllCacheInfoCallback.ets | 8 +- .../requestmanage/DiskCacheProxy.ets | 4 +- .../imageknife/requestmanage/ICache.ets | 4 +- .../requestmanage/MemoryCacheProxy.ets | 2 +- .../requestmanage/RequestManager.ets | 142 +++++++++--------- .../imageknife/transform/AsyncTransform.ets | 4 +- .../imageknife/utils/gif/GIFParseImpl.ets | 4 +- .../imageknife/utils/gif/IParseGif.ets | 5 +- .../imageknife/utils/svg/SVGParseImpl.ets | 7 +- 10 files changed, 104 insertions(+), 97 deletions(-) diff --git a/imageknife/src/main/ets/components/imageknife/RequestOption.ets b/imageknife/src/main/ets/components/imageknife/RequestOption.ets index abdeace..72682c1 100644 --- a/imageknife/src/main/ets/components/imageknife/RequestOption.ets +++ b/imageknife/src/main/ets/components/imageknife/RequestOption.ets @@ -47,7 +47,11 @@ import { ToonFilterTransform } from '../imageknife/transform/ToonFilterTransform import { VignetteFilterTransform } from '../imageknife/transform/VignetteFilterTransform' import { LogUtil } from '../imageknife/utils/LogUtil' import { ImageKnifeGlobal } from './ImageKnifeGlobal' - +import { BusinessError } from '@ohos.base' +export interface Size { + width: number, + height: number +} export class RequestOption { loadSrc: string | PixelMap | Resource; strategy: DiskStrategy = new AUTOMATIC(); @@ -119,10 +123,7 @@ export class RequestOption { /** * set image Component size */ - setImageViewSize(imageSize: { - width: number, - height: number - }) { + setImageViewSize(imageSize:Size) { this.size.width = imageSize.width; this.size.height = imageSize.height; return this; @@ -386,7 +387,7 @@ export class RequestOption { // 缩略图解析成功 - thumbholderOnComplete(imageKnifeData: ImageKnifeData) { + thumbholderOnComplete = (imageKnifeData: ImageKnifeData)=> { if (!this.loadMainReady && !(this.loadErrorReady || this.loadRetryReady)) { //主图未加载成功,并且未加载失败 显示占位图 主图加载成功或者加载失败后=>不展示占位图 this.thumbHolderFunc.asyncSuccess(imageKnifeData) @@ -394,7 +395,7 @@ export class RequestOption { } // 缩略图解析失败 - thumbholderOnError(error) { + thumbholderOnError=(error? :BusinessError|string)=>{ LogUtil.log("缩略图解析失败 error =" + error) } @@ -423,7 +424,7 @@ export class RequestOption { LogUtil.log("重试占位图解析失败 error =" + error) } - loadComplete(imageKnifeData: ImageKnifeData) { + loadComplete = (imageKnifeData: ImageKnifeData)=>{ this.loadMainReady = true; // 三级缓存数据加载成功 for (let requestListener of this.requestListeners) { @@ -445,11 +446,11 @@ export class RequestOption { } // 图片文件落盘之后会自动去寻找下一个数据加载 - removeCurrentAndSearchNext(){ + removeCurrentAndSearchNext =()=>{ (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); } - loadError(err) { + loadError = (err:BusinessError|string)=>{ LogUtil.log("loadError:" + err); //失败占位图展示规则 if (this.retryholderFunc) { diff --git a/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets b/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets index 4e6c7d0..38e62ef 100644 --- a/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets +++ b/imageknife/src/main/ets/components/imageknife/interface/IAllCacheInfoCallback.ets @@ -16,7 +16,7 @@ import {ImageKnifeData} from "../../imageknife/ImageKnifeData" export interface MemoryCacheInfo{ key: string, - data: ImageKnifeData + data: ImageKnifeData | undefined } export interface ResourceCacheInfo{ path: string, @@ -27,9 +27,9 @@ export interface DataCacheInfo{ key: string } export interface AllCacheInfo { - memoryCacheInfo: MemoryCacheInfo - resourceCacheInfo: ResourceCacheInfo - dataCacheInfo: DataCacheInfo + memoryCacheInfo: MemoryCacheInfo | undefined + resourceCacheInfo: ResourceCacheInfo | undefined + dataCacheInfo: DataCacheInfo | undefined } export interface IAllCacheInfoCallback { diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets index 51087e6..e02f161 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/DiskCacheProxy.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import type { ICache } from "../requestmanage/ICache" +import { ICache } from "../requestmanage/ICache" import { DiskLruCache } from "@ohos/disklrucache" export class DiskCacheProxy implements ICache { @@ -47,7 +47,7 @@ export class DiskCacheProxy implements ICache { removeValue(key: string): ArrayBuffer{ // Disk暂无实现 - return; + return new ArrayBuffer(0); } clear() { diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/ICache.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/ICache.ets index a108f84..59e5b74 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/ICache.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/ICache.ets @@ -18,11 +18,11 @@ export interface ICache { // 缓存类型 getName(): string - getValue(key: K): V; + getValue(key: K): V|undefined; putValue(key: K, value: V); - removeValue(key: K): V; + removeValue(key: K): V|undefined; clear(); diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets index 13bab96..889cc53 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import type {ICache} from "../requestmanage/ICache" +import {ICache} from "../requestmanage/ICache" import {LruCache} from "../../cache/LruCache" export class MemoryCacheProxy implements ICache { diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets index f96ac23..4229ef2 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets @@ -13,28 +13,26 @@ * limitations under the License. */ -import { RequestOption } from '../../imageknife/RequestOption' +import { RequestOption,Size } from '../../imageknife/RequestOption' import { DiskLruCache } from '@ohos/disklrucache' import { LruCache } from '../../cache/LruCache' import { SparkMD5 } from '../../3rd_party/sparkmd5/spark-md5' import { MemoryCacheProxy } from '../requestmanage/MemoryCacheProxy' import { DiskCacheProxy } from '../requestmanage/DiskCacheProxy' import { FileTypeUtil } from '../utils/FileTypeUtil' -import type { IDataFetch } from '../../imageknife/networkmanage/IDataFetch' -import type { IResourceFetch } from '../../imageknife/resourcemanage/IResourceFetch' +import { IDataFetch } from '../../imageknife/networkmanage/IDataFetch' +import { IResourceFetch } from '../../imageknife/resourcemanage/IResourceFetch' import { ImageKnifeData, ImageKnifeType } from '../ImageKnifeData' import { AllCacheInfo } from '../../imageknife/interface/IAllCacheInfoCallback' import { ParseImageUtil } from '../utils/ParseImageUtil' -import type { IParseImage } from '../interface/IParseImage' +import { IParseImage } from '../interface/IParseImage' import image from '@ohos.multimedia.image' import { SVGParseImpl } from '../utils/svg/SVGParseImpl' import { GIFParseImpl } from '../utils/gif/GIFParseImpl' import { GIFFrame } from '../utils/gif/GIFFrame' import { LogUtil } from '../../imageknife/utils/LogUtil' +import { BusinessError } from '@ohos.base' -export interface AsyncString { - (data: string): void; -} export enum Stage { @@ -64,13 +62,13 @@ export enum RunReason { export class RequestManager { private TAG: string = "RequestManager"; private options: RequestOption; - private mMemoryCacheProxy: MemoryCacheProxy; + private mMemoryCacheProxy: MemoryCacheProxy; private mDiskCacheProxy: DiskCacheProxy; private mIDataFetch: IDataFetch; private mIResourceFetch: IResourceFetch; - private mParseImageUtil: IParseImage; + private mParseImageUtil: IParseImage; - constructor(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { + constructor(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { this.options = option; // 缓存部分 @@ -87,23 +85,27 @@ export class RequestManager { this.mParseImageUtil = new ParseImageUtil(); } - static execute(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { + static execute(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { LogUtil.log("RequestManager execute") let manager = new RequestManager(option, memoryCache1, diskMemoryCache1, dataFetch, resourceFetch); - return new Promise(manager.process.bind(manager)) - .then(option.loadComplete.bind(option)) - .then(manager.loadCompleteAfter.bind(manager)) - .catch(option.loadError.bind(option)); + return new Promise(manager.process) + .then(option.loadComplete) + .then(manager.loadCompleteAfter) + .catch(option.loadError); } - loadCompleteAfter() { + loadCompleteAfter =()=>{ try { // 内部消化问题 LogUtil.log("loadCompleteAfter!") if (this.options.allCacheInfoCallback) { LogUtil.log("RequestOption =" + JSON.stringify(this.options)); // 内存缓存 - let allCacheInfo = new AllCacheInfo(); + let allCacheInfo:AllCacheInfo = { + memoryCacheInfo:{key:'', data:new ImageKnifeData()}, + resourceCacheInfo:{key:'', path:''}, + dataCacheInfo:{key:'',path:''} + }; let memoryCache = this.mMemoryCacheProxy.getValue(this.options.generateCacheKey); allCacheInfo.memoryCacheInfo = { key: this.options.generateCacheKey, @@ -133,12 +135,12 @@ export class RequestManager { private mStage: Stage = Stage.INITIALIZE; private mRunReason: RunReason = RunReason.INITIALIZE; - process(onComplete, onError) { + process = (onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void)=>{ LogUtil.log("RequestManager process !"); this.loadLeve1MemoryCache(onComplete, onError) } - private runWrapped(request: RequestOption, runReason: RunReason, onComplete, onError) { + private runWrapped(request: RequestOption, runReason: RunReason, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("RequestManager runWrapped") if (runReason == RunReason.INITIALIZE) { this.mStage = this.getNextStage(request, this.mStage); @@ -169,7 +171,7 @@ export class RequestManager { } //究竟从哪里加载数据 - private searchLoadFrom(request: RequestOption, current: Stage, onComplete, onError) { + private searchLoadFrom(request: RequestOption, current: Stage, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("RequestManager searchLoadFrom") if (current == Stage.RESOURCE_CACHE) { this.loadDiskFromTransform(request, onComplete, onError); @@ -185,8 +187,8 @@ export class RequestManager { } // 加载网络资源 - private loadSourceFromNetwork(request: RequestOption, onComplete, onError) { - let success = (arraybuffer) => { + private loadSourceFromNetwork(request: RequestOption, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { + let success = (arraybuffer:ArrayBuffer) => { this.downloadSuccess(arraybuffer, onComplete, onError) } let error = (errorMsg:string) =>{ @@ -196,10 +198,10 @@ export class RequestManager { } // 加载本地资源 - private loadSourceFormNative(request: RequestOption, onComplete, onError) { + private loadSourceFormNative(request: RequestOption, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("RequestManager loadSourceFormNative") // 本地解析后进行一级缓存 - let success = (arrayBuffer) => { + let success = (arrayBuffer:ArrayBuffer) => { // 使用媒体子系统 ImageSource解析文件 获取PixelMap let fileTypeUtil = new FileTypeUtil(); let typeValue = fileTypeUtil.getFileType(arrayBuffer) @@ -217,7 +219,7 @@ export class RequestManager { }) } else { if (request.transformations[0]) { - request.transformations[0].transform(arrayBuffer, request, (error, pixelMap: PixelMap) => { + request.transformations[0].transform(arrayBuffer, request, {asyncTransform:(error:BusinessError|string, pixelMap: PixelMap) => { // 输出给Image if (pixelMap) { @@ -227,7 +229,7 @@ export class RequestManager { } else { onError(error); } - }) + }}) } else { let success = (value: PixelMap) => { @@ -242,7 +244,7 @@ export class RequestManager { this.mIResourceFetch.loadResource(request.loadSrc as Resource, success, onError); } // 加载磁盘缓存 原图 - private loadDiskFromSource(request: RequestOption, onComplete, onError) { + private loadDiskFromSource(request: RequestOption, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("RequestManager loadDiskFromSource") let cached = this.mDiskCacheProxy.getValue(request.generateDataKey) if (cached != null && cached.byteLength > 0) { @@ -254,7 +256,7 @@ export class RequestManager { } // 加载磁盘缓存 变换后图片 - private loadDiskFromTransform(request: RequestOption, onComplete, onError) { + private loadDiskFromTransform(request: RequestOption, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("RequestManager loadDiskFromTransform") let cached = this.mDiskCacheProxy.getValue(request.generateResourceKey) if (cached != null) { @@ -265,7 +267,7 @@ export class RequestManager { } } - parseSource(request: RequestOption, onComplete, onError) { + parseSource(request: RequestOption, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("RequestManager parseSource") if ((typeof (request.loadSrc as image.PixelMap).isEditable) == 'boolean') { // PixelMap 外层捕获效率更高,不会进入这里 @@ -282,7 +284,7 @@ export class RequestManager { } - private loadLeve1MemoryCache(onComplete, onError) { + private loadLeve1MemoryCache(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log("RequestManager loadLeve1MemoryCache") // 一级缓存 内存获取 let cache = this.mMemoryCacheProxy.loadMemoryCache(this.options.generateCacheKey, this.options.isCacheable); @@ -297,7 +299,7 @@ export class RequestManager { } // 解析磁盘文件变成PixeMap - private parseDiskFile2PixelMap(request: RequestOption, source: ArrayBuffer, onComplete, onError) { + private parseDiskFile2PixelMap(request: RequestOption, source: ArrayBuffer, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { // 步骤一:文件转为pixelMap 然后变换 给Image组件 let fileTypeUtil = new FileTypeUtil(); let typeValue = fileTypeUtil.getFileType(source); @@ -314,23 +316,23 @@ export class RequestManager { } else { if (this.options.transformations[0]) { if (this.options.thumbSizeMultiplier) { - let thumbOption = new RequestOption(); + let thumbOption:RequestOption = new RequestOption(); thumbOption.setImageViewSize({ width: Math.round(this.options.thumbSizeMultiplier * this.options.size.width), height: Math.round(this.options.thumbSizeMultiplier * this.options.size.height) }) - let thumbCallback = this.options.thumbholderOnComplete.bind(this.options); - let thumbError = this.options.thumbholderOnError.bind(this.options); - this.options.transformations[0].transform(source, thumbOption, (error, pixelMap: PixelMap) => { + let thumbCallback = this.options.thumbholderOnComplete; + let thumbError = this.options.thumbholderOnError; + this.options.transformations[0].transform(source, thumbOption,{asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { if (pixelMap) { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); thumbCallback(imageKnifeData); } else { thumbError(error); } - }) + }}) setTimeout(()=>{ - this.options.transformations[0].transform(source, request, (error, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, request, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { if (pixelMap) { // 保存一份变换后的图片PixelMap到MemoryCache let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); @@ -339,11 +341,11 @@ export class RequestManager { } else { onError(error); } - }) + }}) },this.options.thumbDelayTime); } else { - this.options.transformations[0].transform(source, request, (error, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, request, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { if (pixelMap) { // 保存一份变换后的图片PixelMap到MemoryCache let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); @@ -352,13 +354,13 @@ export class RequestManager { } else { onError(error); } - }) + }}) } } else { // thumbnail 缩略图部分 if (request.thumbSizeMultiplier) { - let thumbCallback = this.options.thumbholderOnComplete.bind(this.options); - let thumbError = this.options.thumbholderOnError.bind(this.options); + let thumbCallback = this.options.thumbholderOnComplete + let thumbError = this.options.thumbholderOnError let thumbSuccess = (value: PixelMap) => { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, value); thumbCallback(imageKnifeData); @@ -386,13 +388,13 @@ export class RequestManager { } // 解析磁盘变换后文件变成PixeMap - private parseDiskTransformFile2PixelMap(request: RequestOption, source: ArrayBuffer, onComplete, onError) { + private parseDiskTransformFile2PixelMap(request: RequestOption, source: ArrayBuffer, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { let fileTypeUtil = new FileTypeUtil(); let typeValue = fileTypeUtil.getFileType(source); // thumbnail 缩略图部分 if (request.thumbSizeMultiplier) { - let thumbCallback = this.options.thumbholderOnComplete.bind(this.options); - let thumbError = this.options.thumbholderOnError.bind(this.options); + let thumbCallback = this.options.thumbholderOnComplete + let thumbError = this.options.thumbholderOnError let thumbSuccess = (value: PixelMap) => { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, value); thumbCallback(imageKnifeData); @@ -416,7 +418,7 @@ export class RequestManager { } } - private downloadSuccess(source: ArrayBuffer, onComplete, onError) { + private downloadSuccess(source: ArrayBuffer, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void) { LogUtil.log('Download task completed.'); if(source == null || source == undefined || source.byteLength <= 0){ @@ -447,8 +449,8 @@ export class RequestManager { .then(async (arraybuffer: ArrayBuffer)=>{ await this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) }) - .catch(err=>{ - LogUtil.log('download file is ='+ImageKnifeData.GIF+'and save diskLruCache error ='+ err) + .catch( (err:BusinessError)=>{ + LogUtil.log('download file is ='+ImageKnifeData.GIF+'and save diskLruCache error ='+ (err as BusinessError)) }) }else if(ImageKnifeData.SVG == filetype){ // 处理svg @@ -461,8 +463,8 @@ export class RequestManager { .then(async (arraybuffer: ArrayBuffer)=>{ await this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) }) - .catch(err=>{ - LogUtil.log('download file is ='+ImageKnifeData.SVG+'and save diskLruCache error ='+ err) + .catch((err:BusinessError)=>{ + LogUtil.log('download file is ='+ImageKnifeData.SVG+'and save diskLruCache error ='+ (err as BusinessError)) }) } else { // 进行变换 @@ -471,19 +473,19 @@ export class RequestManager { if (this.options.thumbSizeMultiplier) { this.thumbnailProcess(source, filetype, onComplete, onError); } else { - this.options.transformations[0].transform(source, this.options, (error, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, this.options, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { if (pixelMap) { this.saveCacheAndDisk(pixelMap, filetype, onComplete, source); } else { onError(error); } - }) + }}) } } else { // thumbnail 缩略图部分 if (this.options.thumbSizeMultiplier) { - let thumbCallback = this.options.thumbholderOnComplete.bind(this.options); - let thumbError = this.options.thumbholderOnError.bind(this.options); + let thumbCallback = this.options.thumbholderOnComplete + let thumbError = this.options.thumbholderOnError let thumbSuccess = (value: PixelMap) => { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, value); thumbCallback(imageKnifeData); @@ -515,16 +517,16 @@ export class RequestManager { - private saveCacheAndDisk(value: PixelMap, filetype:string, onComplete, source:ArrayBuffer) { + private saveCacheAndDisk(value: PixelMap, filetype:string, onComplete:(value:ImageKnifeData)=>void|PromiseLike, source:ArrayBuffer) { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, value); this.mMemoryCacheProxy.putValue(this.options.generateCacheKey, imageKnifeData); - let save2DiskCache = async (arraybuffer) => { + let save2DiskCache = async (arraybuffer:ArrayBuffer) => { await this.mDiskCacheProxy.putValue(this.options.generateDataKey, arraybuffer) // 落盘之后需要主动移除当前request并且调用下一个加载 - let removeCurrentAndSearchNextRun = this.options.removeCurrentAndSearchNext.bind(this.options) + let removeCurrentAndSearchNextRun = this.options.removeCurrentAndSearchNext removeCurrentAndSearchNextRun(); } - let runSave2Disk = (resolve, reject) => { + let runSave2Disk = (resolve:(value:ArrayBuffer)=>void|PromiseLike, reject:(reason?:BusinessError|string)=>void) => { resolve(source); } let promise = new Promise(runSave2Disk); @@ -533,49 +535,49 @@ export class RequestManager { onComplete(imageKnifeData); } - thumbnailProcess(source:ArrayBuffer, filetype:string, onComplete, onError){ + thumbnailProcess(source:ArrayBuffer, filetype:string, onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void){ let thumbOption = new RequestOption(); thumbOption.setImageViewSize({ width: Math.round(this.options.thumbSizeMultiplier * this.options.size.width), height: Math.round(this.options.thumbSizeMultiplier * this.options.size.height) }) - let thumbCallback = this.options.thumbholderOnComplete.bind(this.options); - let thumbError = this.options.thumbholderOnError.bind(this.options); - this.options.transformations[0].transform(source, thumbOption, (error, pixelMap: PixelMap) => { + let thumbCallback = this.options.thumbholderOnComplete + let thumbError = this.options.thumbholderOnError + this.options.transformations[0].transform(source, thumbOption, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { if (pixelMap) { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); thumbCallback(imageKnifeData); } else { thumbError(error); } - }) + }}) setTimeout(() => { - this.options.transformations[0].transform(source, this.options, (error, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, this.options,{asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { if (pixelMap) { this.saveCacheAndDisk(pixelMap, filetype, onComplete, source); } else { onError(error); } - }) + }}) }, this.options.thumbDelayTime) } - private svgProcess(onComplete, onError, arraybuffer, typeValue, cacheStrategy?: (cacheData: ImageKnifeData) => void) { + private svgProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string, cacheStrategy?: (cacheData: ImageKnifeData) => void) { let svgParseImpl = new SVGParseImpl() - let size = { width: this.options.size.width, height: this.options.size.height } + let size:Size = { width: this.options.size.width, height: this.options.size.height } svgParseImpl.parseSvg(arraybuffer, size).then((value: PixelMap) => { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value) if(cacheStrategy){ cacheStrategy(imageKnifeData) } onComplete(imageKnifeData) - }).catch(err => { + }).catch((err:BusinessError) => { onError(err) }) } - private gifProcess(onComplete, onError, arraybuffer, typeValue, cacheStrategy?: (cacheData: ImageKnifeData) => void) { + private gifProcess(onComplete:(value:ImageKnifeData)=>void|PromiseLike, onError:(reason?:BusinessError|string)=>void, arraybuffer:ArrayBuffer, typeValue:string, cacheStrategy?: (cacheData: ImageKnifeData) => void) { let gifParseImpl = new GIFParseImpl() - gifParseImpl.parseGifs(arraybuffer, (data?,err?)=>{ + gifParseImpl.parseGifs(arraybuffer, (data?:GIFFrame[],err?:BusinessError|string)=>{ if(err){ onError(err) } diff --git a/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets b/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets index 80bfd74..a868d1f 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +import { BusinessError } from '@ohos.base' export interface AsyncTransform { - (err, data: T) + asyncTransform:(err:BusinessError|string, data: T)=>void } 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 aecbc66..bf2b01d 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets @@ -19,9 +19,11 @@ import { parseBufferToFrame } from './parse/GIFParse' import { LogUtil } from '../../utils/LogUtil' import image from '@ohos.multimedia.image' import { ImageKnifeGlobal } from '../../ImageKnifeGlobal' +import { BusinessError } from '@ohos.base' +import worker from '@ohos.worker'; export class GIFParseImpl implements IParseGif { - parseGifs(imageinfo: ArrayBuffer, callback: (data?, err?) => void, worker?,runMainThread?:boolean) { + parseGifs(imageinfo: ArrayBuffer, callback: (data?:GIFFrame[], err?:BusinessError|string) => void, worker?:worker.ThreadWorker,runMainThread?:boolean) { let resolveWorker = worker; LogUtil.log('parseGifs resolveWorker1 is null =' + (resolveWorker == null)) if (!resolveWorker) { diff --git a/imageknife/src/main/ets/components/imageknife/utils/gif/IParseGif.ets b/imageknife/src/main/ets/components/imageknife/utils/gif/IParseGif.ets index 19ff54b..d80f388 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/IParseGif.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/IParseGif.ets @@ -12,7 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { BusinessError } from '@ohos.base' +import { GIFFrame } from './GIFFrame' +import worker from '@ohos.worker'; export interface IParseGif{ // gif解析 - parseGifs(imageinfo:ArrayBuffer,callback:(data?,err?)=>void,worker?) + parseGifs:(imageinfo: ArrayBuffer, callback: (data?:GIFFrame[], err?:BusinessError|string) => void, worker?:worker.ThreadWorker,runMainThread?:boolean)=>void } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets b/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets index 6d57f64..9ffbe7d 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/svg/SVGParseImpl.ets @@ -12,11 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import type {IParseSvg} from'./IParseSvg' +import {IParseSvg} from'./IParseSvg' import {SVGImageView} from '@ohos/svg' -export interface Size{ - width:number,height:number -} +import {Size} from '../../RequestOption' + export class SVGParseImpl implements IParseSvg{ parseSvg(imageinfo: ArrayBuffer,size?:Size): Promise{ let model = new SVGImageView.SVGImageViewModel(); From 3595190083bac7ff18d017d17f50fb6f97eb55d1 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Tue, 19 Sep 2023 16:51:01 +0800 Subject: [PATCH 11/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B911=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife->resourcemanager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../resourcemanage/IResourceFetch.ets | 7 +++---- .../resourcemanage/ParseResClient.ets | 11 +++++----- .../resourcemanage/ParseResClientBase64.ets | 21 ++++++++++--------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/imageknife/src/main/ets/components/imageknife/resourcemanage/IResourceFetch.ets b/imageknife/src/main/ets/components/imageknife/resourcemanage/IResourceFetch.ets index 3ed14c4..70057e5 100644 --- a/imageknife/src/main/ets/components/imageknife/resourcemanage/IResourceFetch.ets +++ b/imageknife/src/main/ets/components/imageknife/resourcemanage/IResourceFetch.ets @@ -13,9 +13,8 @@ * limitations under the License. */ -import {RequestOption} from "../RequestOption" - +import { BusinessError } from '@ohos.base' // 本地资源解析抽象接口 -export interface IResourceFetch { - loadResource(res: Resource, onCompleteFunction, onErrorFunction); +export interface IResourceFetch { + loadResource:(res: Resource, onCompleteFunction:(value:T)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void)=>void; } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets index 44a0586..21fd348 100644 --- a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets +++ b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets @@ -13,14 +13,13 @@ * limitations under the License. */ -import type {IResourceFetch} from '../resourcemanage/IResourceFetch' +import {IResourceFetch} from '../resourcemanage/IResourceFetch' import {ResourceTypeEts} from '../../imageknife/constants/ResourceTypeEts' - import resourceManager from '@ohos.resourceManager'; import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; - -export class ParseResClient implements IResourceFetch { - loadResource(res: Resource, onCompleteFunction, onErrorFunction) { +import { BusinessError } from '@ohos.base' +export class ParseResClient implements IResourceFetch { + loadResource(res: Resource, onCompleteFunction:(value:ArrayBuffer)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void) { let resId = res.id; let resType = res.type; if (resType == ResourceTypeEts.MEDIA) { @@ -30,7 +29,7 @@ export class ParseResClient implements IResourceFetch { let arrayBuffer = this.typedArrayToBuffer(data); onCompleteFunction(arrayBuffer) }) - .catch(err => { + .catch( (err:BusinessError) => { onErrorFunction(err) }) } diff --git a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets index 03dbc09..6f563b5 100644 --- a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets +++ b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClientBase64.ets @@ -13,31 +13,32 @@ * limitations under the License. */ -import type {IResourceFetch} from '../resourcemanage/IResourceFetch' -import {ResourceTypeEts} from '../../imageknife/constants/ResourceTypeEts' -import {Base64} from '../../cache/Base64' - +import { IResourceFetch } from '../resourcemanage/IResourceFetch' +import { ResourceTypeEts } from '../../imageknife/constants/ResourceTypeEts' +import { Base64 } from '../../cache/Base64' +import { BusinessError } from '@ohos.base' import resourceManager from '@ohos.resourceManager'; import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; -export class ParseResClientBase64 implements IResourceFetch { - loadResource(res: Resource, onCompleteFunction, onErrorFunction) { +export class ParseResClientBase64 implements IResourceFetch { + loadResource(res: Resource, onCompleteFunction: (value: ArrayBuffer) => void | PromiseLike, onErrorFunction: (reason?: BusinessError | string) => void) { let resId = res.id; let resType = res.type; if (resType == ResourceTypeEts.MEDIA) { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance() + .getHapContext() as Record).resourceManager as resourceManager.ResourceManager) .getMediaContentBase64(resId) .then(data => { let matchReg = ';base64,'; - var firstIndex = data.indexOf(matchReg) + let firstIndex = data.indexOf(matchReg) data = data.substring(firstIndex + matchReg.length, data.length) let arrayBuffer = Base64.getInstance() .decode(data); onCompleteFunction(arrayBuffer) }) - .catch(err => { + .catch((err: BusinessError) => { onErrorFunction(err) - }) + }) } else if (resType == ResourceTypeEts.RAWFILE) { onErrorFunction('ParseResClientBase64 本地资源是rawfile暂时无法解析出错') From ca0e3fe968485320bdd92d79c95964920c7a9e2c Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Tue, 19 Sep 2023 19:57:46 +0800 Subject: [PATCH 12/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B912=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife->transform?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../imageknife/transform/AsyncTransform.ets | 2 +- .../transform/BlurTransformation.ets | 30 ++--- .../BrightnessFilterTransformation.ets | 30 +++-- .../ContrastFilterTransformation.ets | 34 ++--- .../transform/CropCircleTransformation.ets | 71 +++++----- .../CropCircleWithBorderTransformation.ets | 72 +++++----- .../transform/CropSquareTransformation.ets | 38 +++--- .../transform/CropTransformation.ets | 65 +++++---- .../transform/GrayscaleTransformation.ets | 36 ++--- .../transform/InvertFilterTransformation.ets | 36 ++--- .../transform/KuwaharaFilterTransform.ets | 45 +++---- .../transform/MaskTransformation.ets | 75 ++++++----- .../PixelationFilterTransformation.ets | 31 +++-- .../transform/RotateImageTransformation.ets | 35 +++-- .../RoundedCornersTransformation.ets | 126 +++++++++--------- .../transform/SepiaFilterTransformation.ets | 46 ++++--- .../transform/SketchFilterTransformation.ets | 32 +++-- .../transform/SwirlFilterTransformation.ets | 60 ++++----- .../transform/ToonFilterTransform.ets | 44 +++--- .../imageknife/transform/TransformUtils.ets | 84 ++++++------ .../transform/VignetteFilterTransform.ets | 44 +++--- .../transform/pixelmap/CenterCrop.ets | 19 ++- .../transform/pixelmap/CenterInside.ets | 21 ++- .../transform/pixelmap/FitCenter.ets | 19 ++- .../imageknife/utils/CalculatePixelUtils.ets | 19 +-- .../components/imageknife/utils/FastBlur.ets | 59 +++++--- .../imageknife/utils/PixelUtils.ets | 30 +++-- 27 files changed, 614 insertions(+), 589 deletions(-) diff --git a/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets b/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets index a868d1f..d267bc4 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/AsyncTransform.ets @@ -14,5 +14,5 @@ */ import { BusinessError } from '@ohos.base' export interface AsyncTransform { - asyncTransform:(err:BusinessError|string, data: T)=>void + asyncTransform:(err:BusinessError|string, data: T | null)=>void } diff --git a/imageknife/src/main/ets/components/imageknife/transform/BlurTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/BlurTransformation.ets index 70a479c..b309333 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/BlurTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/BlurTransformation.ets @@ -21,7 +21,8 @@ import { TransformUtils } from "../transform/TransformUtils" import image from "@ohos.multimedia.image" import { fastBlur } from "../utils/FastBlur" import {LogUtil} from '../../imageknife/utils/LogUtil' - +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class BlurTransformation implements BaseTransform { private _mRadius: number; @@ -38,23 +39,20 @@ export class BlurTransformation implements BaseTransform { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";BlurTransformation buf is empty"); if (func) { - func(Constants.PROJECT_TAG + ";BlurTransformation buf is empty", null); + func?.asyncTransform(Constants.PROJECT_TAG + ";BlurTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth = size.width; + let pixelMapHeight = size.height; + let targetWidth = request.size.width; + let targetHeight = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -62,7 +60,7 @@ export class BlurTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -77,10 +75,10 @@ export class BlurTransformation implements BaseTransform { fastBlur.blur(data, this._mRadius, true, func); } }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - func(e, null); + func?.asyncTransform(e, null); }) - }) + }}) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets index d099976..fd5d58c 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets @@ -20,6 +20,8 @@ import { RequestOption } from "../../imageknife/RequestOption" import { LogUtil } from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" import { GPUImageBrightnessFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' /** * brightness value ranges from -1.0 to 1.0, with 0.0 as the normal level @@ -38,27 +40,27 @@ export class BrightnessFilterTransformation implements BaseTransform { async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); - let imageInfo = await imageSource.getImageInfo(); - let size = { + let imageInfo:image.ImageInfo = await imageSource.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("GrayscaleTransformation The image size does not exist."), null) + func?.asyncTransform("GrayscaleTransformation The image size does not exist.", null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -66,7 +68,7 @@ export class BrightnessFilterTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -85,12 +87,12 @@ export class BrightnessFilterTransformation implements BaseTransform { let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight); data.writeBufferToPixels(buf); if (func) { - func("success", data); + func?.asyncTransform("success", data); } return; } - var dataArray = new Uint8Array(bufferData); + let dataArray = new Uint8Array(bufferData); for (let index = 0; index < dataArray.length; index += 4) { dataArray[index] = this.checkVisAble(dataArray[index] * this._mBrightness + dataArray[index]); @@ -102,7 +104,7 @@ export class BrightnessFilterTransformation implements BaseTransform { await data.writeBufferToPixels(bufferData); if (func) { - func("", data); + func?.asyncTransform("", data); } } diff --git a/imageknife/src/main/ets/components/imageknife/transform/ContrastFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/ContrastFilterTransformation.ets index 57d46c4..11d9946 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/ContrastFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/ContrastFilterTransformation.ets @@ -20,6 +20,8 @@ import { RequestOption } from "../../imageknife/RequestOption" import { LogUtil } from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" import { GPUImageContrastFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' /** * 以24位色图像为例子,每种色彩都可以用0-255, @@ -50,27 +52,27 @@ export class ContrastFilterTransformation implements BaseTransform { async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";ContrastFilterTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";ContrastFilterTransformation buf is empty", null); + if (func!=undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";ContrastFilterTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); - let imageInfo = await imageSource.getImageInfo(); - let size = { + let imageInfo:image.ImageInfo = await imageSource.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("ContrastFilterTransformation The image size does not exist."), null) + func?.asyncTransform("ContrastFilterTransformation The image size does not exist.", null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -78,7 +80,7 @@ export class ContrastFilterTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -97,13 +99,13 @@ export class ContrastFilterTransformation implements BaseTransform { filter.setContrast(this._mContrast) let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight); data.writeBufferToPixels(buf); - if (func) { - func("success", data); + if (func != undefined) { + func?.asyncTransform("success", data); } return; } - var dataArray = new Uint8Array(bufferData); + let dataArray = new Uint8Array(bufferData); let brightness = 0; //亮度的偏移量,可以默认0 for (let index = 0; index < dataArray.length; index += 4) { @@ -114,8 +116,8 @@ export class ContrastFilterTransformation implements BaseTransform { } await data.writeBufferToPixels(bufferData); - if (func) { - func("", data); + if (func != undefined) { + func?.asyncTransform("", data); } } diff --git a/imageknife/src/main/ets/components/imageknife/transform/CropCircleTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/CropCircleTransformation.ets index d526c40..239810d 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/CropCircleTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/CropCircleTransformation.ets @@ -20,6 +20,8 @@ import { RequestOption } from "../../imageknife/RequestOption" import { TransformUtils } from "../transform/TransformUtils" import {LogUtil} from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class CropCircleTransformation implements BaseTransform { private static TAG: string = "CropCircleTransformation"; @@ -36,37 +38,34 @@ export class CropCircleTransformation implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + CropCircleTransformation.TAG + " buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + CropCircleTransformation.TAG + " buf is empty", null); + if (func!=undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + CropCircleTransformation.TAG + " buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - var that = this; - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size | null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } if (pixelMapHeight < targetHeight) { targetHeight = pixelMapHeight; } - that.updatePixelMapSize(imageSource, targetWidth, targetHeight, func); - }) + this.updatePixelMapSize(imageSource, targetWidth, targetHeight, func); + }}) } - private updatePixelMapSize(imageSource: any, outWith: number, outHeight: number, func?: AsyncTransform) { - var options = { + private updatePixelMapSize(imageSource: image.ImageSource, outWith: number, outHeight: number, func?: AsyncTransform) { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: outWith, @@ -74,30 +73,30 @@ export class CropCircleTransformation implements BaseTransform { } } imageSource.createPixelMap(options) - .then(p => { + .then((p:PixelMap) => { this.transformCircle(p, func); }) - .catch(e => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + CropCircleTransformation.TAG + " transform e:" + e); - if (func) { - func(Constants.PROJECT_TAG + CropCircleTransformation.TAG + "e" + e, null); + if (func!=undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + CropCircleTransformation.TAG + "e" + e, null); } }) } - private async transformCircle(data: any, func?: AsyncTransform) { - let imageInfo = await data.getImageInfo(); - let size = { + private async transformCircle(data: PixelMap, func?: AsyncTransform) { + let imageInfo:image.ImageInfo = await data.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("CropCircleTransformation The image size does not exist."), null) + func?.asyncTransform("CropCircleTransformation The image size does not exist.", null) return; } - var height = size.height; - var width = size.width; + let height:number = size.height; + let width:number = size.width; this.mRadius = 0; if (width > height) { this.mRadius = height / 2; @@ -107,13 +106,13 @@ export class CropCircleTransformation implements BaseTransform { this.mCenterX = width / 2; this.mCenterY = height / 2; - let bufferData = new ArrayBuffer(data.getPixelBytesNumber()); + let bufferData:ArrayBuffer = new ArrayBuffer(data.getPixelBytesNumber()); await data.readPixelsToBuffer(bufferData); - var dataArray = new Uint8Array(bufferData); + let dataArray = new Uint8Array(bufferData); - for (var h = 0;h <= height; h++) { - for (var w = 0;w <= width; w++) { + for (let h = 0;h <= height; h++) { + for (let w = 0;w <= width; w++) { if (this.isContainsCircle(w, h)) { continue; } @@ -126,15 +125,15 @@ export class CropCircleTransformation implements BaseTransform { } } await data.writeBufferToPixels(bufferData); - if (func) { - func("", data); + if (func != undefined) { + func?.asyncTransform("", data); } } isContainsCircle(x: number, y: number): boolean { - var a = Math.pow((this.mCenterX - x), 2); - var b = Math.pow((this.mCenterY - y), 2); - var c = Math.sqrt((a + b)); + let a = Math.pow((this.mCenterX - x), 2); + let b = Math.pow((this.mCenterY - y), 2); + let c = Math.sqrt((a + b)); return c <= this.mRadius; } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/CropCircleWithBorderTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/CropCircleWithBorderTransformation.ets index 3cd5843..183c47e 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/CropCircleWithBorderTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/CropCircleWithBorderTransformation.ets @@ -20,7 +20,13 @@ import { RequestOption } from "../../imageknife/RequestOption" import { TransformUtils } from "../transform/TransformUtils" import {LogUtil} from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" - +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' +export interface rgbColor{ + r_color: number, + g_color: number, + b_color: number, +} export class CropCircleWithBorderTransformation implements BaseTransform { private static TAG: string = "CropCircleTransformation"; private mBorderSize: number = 5; @@ -31,11 +37,7 @@ export class CropCircleWithBorderTransformation implements BaseTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";CropCircleWithBorderTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";CropCircleWithBorderTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";CropCircleWithBorderTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - var that = this; - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size:Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth = size.width; + let pixelMapHeight = size.height; + let targetWidth = request.size.width; + let targetHeight = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } if (pixelMapHeight < targetHeight) { targetHeight = pixelMapHeight; } - that.updatePixelMapSize(imageSource, targetWidth, targetHeight, func); - }) + this.updatePixelMapSize(imageSource, targetWidth, targetHeight, func); + }}) } - private updatePixelMapSize(imageSource: any, outWith: number, outHeight: number, func?: AsyncTransform) { - var options = { + private updatePixelMapSize(imageSource: image.ImageSource, outWith: number, outHeight: number, func?: AsyncTransform) { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: outWith, @@ -93,18 +91,18 @@ export class CropCircleWithBorderTransformation implements BaseTransform { + .then((pixelMap:PixelMap) => { this.transformPixelMap(pixelMap, outWith, outHeight, func); }) - .catch(e => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";CropCircleWithBorderTransformation e:" + e); - if (func) { - func(Constants.PROJECT_TAG + ";CropCircleWithBorderTransformation e:" + e, null); + if (func!=undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";CropCircleWithBorderTransformation e:" + e, null); } }) } - private async transformPixelMap(pixelMap: any, width: number, height: number, func?: AsyncTransform) { + private async transformPixelMap(pixelMap: PixelMap, width: number, height: number, func?: AsyncTransform) { this.mRadius = 0; if (width > height) { this.mRadius = height / 2; @@ -118,7 +116,7 @@ export class CropCircleWithBorderTransformation implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";CropSquareTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";CropSquareTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";CropSquareTransformation buf is empty", null); } return; } @@ -40,21 +42,21 @@ export class CropSquareTransformation implements BaseTransform { } squareCrop(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); imageSource.getImageInfo() - .then((p) => { - var pw = p.size.width; - var ph = p.size.height; - var outWidth = request.size.width; - var outHeight = request.size.height; + .then((p:image.ImageInfo) => { + let pw:number = p.size.width; + let ph:number = p.size.height; + let outWidth:number = request.size.width; + let outHeight:number = request.size.height; if (pw < outWidth) { outWidth = pw; } if (ph < outHeight) { outHeight = ph; } - var targetSize = outWidth > outHeight ? outHeight : outWidth; - var options = { + let targetSize:number = outWidth > outHeight ? outHeight : outWidth; + let options:image.DecodingOptions = { editable: true, rotate: 0, desiredSize: { @@ -68,19 +70,19 @@ export class CropSquareTransformation implements BaseTransform { } imageSource.createPixelMap(options) .then(data => { - if (func) { - func("", data); + if (func != undefined) { + func?.asyncTransform("", data); } }) - .catch(e => { - if (func) { - func(Constants.PROJECT_TAG + ";CropSquareTransformation e:" + e, null); + .catch((e:BusinessError) => { + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";CropSquareTransformation e:" + e, null); } }) }) - .catch((error) => { - if (func) { - func(Constants.PROJECT_TAG + ";CropSquareTransformation error:" + error, null); + .catch((error:BusinessError) => { + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";CropSquareTransformation error:" + error, null); } }) } diff --git a/imageknife/src/main/ets/components/imageknife/transform/CropTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/CropTransformation.ets index c8af2ce..d98f56f 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/CropTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/CropTransformation.ets @@ -20,14 +20,16 @@ import { RequestOption } from "../../imageknife/RequestOption" import { TransformUtils } from "../transform/TransformUtils" import {LogUtil} from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class CropTransformation implements BaseTransform { private static TAG: string = "CropCircleTransformation"; - private mWidth: number; - private mHeight: number; + private mWidth: number = 0; + private mHeight: number = 0; private mCropType: CropType = CropType.CENTER; - constructor(width: number, height: number, cropType?: CropType) { + constructor(width: number, height: number, cropType: CropType) { this.mWidth = width; this.mHeight = height; this.mCropType = cropType; @@ -42,35 +44,32 @@ export class CropTransformation implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";CropTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";CropTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";CropTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; this.mWidth = this.mWidth == 0 ? pixelMapWidth : this.mWidth; this.mHeight = this.mHeight == 0 ? pixelMapHeight : this.mHeight; - var scaleX = this.mWidth / pixelMapWidth; - var scaleY = this.mHeight / pixelMapHeight; - var scale = Math.max(scaleX, scaleY); + let scaleX:number = this.mWidth / pixelMapWidth; + let scaleY:number = this.mHeight / pixelMapHeight; + let scale:number = Math.max(scaleX, scaleY); - var scaledWidth = scale * pixelMapWidth; - var scaledHeight = scale * pixelMapHeight; - var left = (this.mWidth - scaledWidth) / 2; - var top = Math.abs(this.getTop(pixelMapHeight)); - var options = { + let scaledWidth:number = scale * pixelMapWidth; + let scaledHeight:number = scale * pixelMapHeight; + let left:number = (this.mWidth - scaledWidth) / 2; + let top:number = Math.abs(this.getTop(pixelMapHeight)); + let options:image.DecodingOptions = { editable: true, desiredRegion: { size: { @@ -82,23 +81,23 @@ export class CropTransformation implements BaseTransform { }, } imageSource.createPixelMap(options) - .then((data) => { - func("", data); + .then((data:PixelMap) => { + func?.asyncTransform("", data); }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - func(e, null); + func?.asyncTransform(e, null); }) - }) + }}) } private getTop(scaledHeight: number): number{ - switch (this.mCropType.valueOf()) { - case CropType.TOP.valueOf(): + switch (this.mCropType) { + case CropType.TOP: return 0; - case CropType.CENTER.valueOf(): + case CropType.CENTER: return (this.mHeight - scaledHeight) / 2; - case CropType.BOTTOM.valueOf(): + case CropType.BOTTOM: return this.mHeight - scaledHeight; default: return 0; @@ -107,7 +106,7 @@ export class CropTransformation implements BaseTransform { } export enum CropType { - TOP, - CENTER, - BOTTOM + TOP = 0, + CENTER = 1, + BOTTOM = 2 } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/GrayscaleTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/GrayscaleTransformation.ets index e092312..fc23f74 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/GrayscaleTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/GrayscaleTransformation.ets @@ -21,6 +21,8 @@ import { TransformUtils } from "../transform/TransformUtils" import {LogUtil} from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" import { GPUImageGrayscaleFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class GrayscaleTransformation implements BaseTransform { getName() { @@ -30,27 +32,27 @@ export class GrayscaleTransformation implements BaseTransform { async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";GrayscaleTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); let imageInfo = await imageSource.getImageInfo(); - let size = { + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("GrayscaleTransformation The image size does not exist."), null) + func?.asyncTransform("GrayscaleTransformation The image size does not exist.", null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -58,14 +60,14 @@ export class GrayscaleTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, height: targetHeight } } - let data = await imageSource.createPixelMap(options); + let data:PixelMap= await imageSource.createPixelMap(options); let bufferData = new ArrayBuffer(data.getPixelBytesNumber()); let bufferNewData = new ArrayBuffer(data.getPixelBytesNumber()); @@ -76,15 +78,15 @@ export class GrayscaleTransformation implements BaseTransform { filter.setImageData(bufferData, targetWidth, targetHeight); let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight); data.writeBufferToPixels(buf); - if (func) { - func("success", data); + if (func != undefined) { + func?.asyncTransform("success", data); } return; } - var dataArray = new Uint8Array(bufferData); - var dataNewArray = new Uint8Array(bufferNewData); + let dataArray = new Uint8Array(bufferData); + let dataNewArray = new Uint8Array(bufferNewData); for (let index = 0; index < dataArray.length; index += 4) { const r = dataArray[index]; @@ -99,8 +101,8 @@ export class GrayscaleTransformation implements BaseTransform { } await data.writeBufferToPixels(bufferNewData); - if (func) { - func('', data); + if (func != undefined) { + func?.asyncTransform('', data); } } diff --git a/imageknife/src/main/ets/components/imageknife/transform/InvertFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/InvertFilterTransformation.ets index ffd131c..7fcefc0 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/InvertFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/InvertFilterTransformation.ets @@ -20,6 +20,8 @@ import { RequestOption } from "../../imageknife/RequestOption" import {LogUtil} from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" import { GPUImageColorInvertFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' /** ** Image inversion is particularly useful for enhancing white or gray detail in @@ -37,28 +39,28 @@ export class InvertFilterTransformation implements BaseTransform { async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";InvertFilterTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";InvertFilterTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";InvertFilterTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); - let imageInfo = await imageSource.getImageInfo(); - let size = { + let imageInfo:image.ImageInfo = await imageSource.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("InvertFilterTransformation The image size does not exist."), null) + func?.asyncTransform("InvertFilterTransformation The image size does not exist.", null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -66,7 +68,7 @@ export class InvertFilterTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -74,7 +76,7 @@ export class InvertFilterTransformation implements BaseTransform { } } - let data = await imageSource.createPixelMap(options); + let data:PixelMap = await imageSource.createPixelMap(options); let bufferData = new ArrayBuffer(data.getPixelBytesNumber()); await data.readPixelsToBuffer(bufferData); @@ -84,14 +86,14 @@ export class InvertFilterTransformation implements BaseTransform { filter.setImageData(bufferData, targetWidth, targetHeight); let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight); data.writeBufferToPixels(buf); - if (func) { - func("success", data); + if (func != undefined) { + func?.asyncTransform("success", data); } return; } - var dataArray = new Uint8Array(bufferData); + let dataArray = new Uint8Array(bufferData); for (let index = 0; index < dataArray.length; index += 4) { dataArray[index] = this.checkVisAble(255 - dataArray[index]); @@ -99,8 +101,8 @@ export class InvertFilterTransformation implements BaseTransform { dataArray[index+2] = this.checkVisAble(255 - dataArray[index+2]); } await data.writeBufferToPixels(bufferData); - if (func) { - func('', data); + if (func != undefined) { + func?.asyncTransform('', data); } } diff --git a/imageknife/src/main/ets/components/imageknife/transform/KuwaharaFilterTransform.ets b/imageknife/src/main/ets/components/imageknife/transform/KuwaharaFilterTransform.ets index 5ce2725..edc89a7 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/KuwaharaFilterTransform.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/KuwaharaFilterTransform.ets @@ -21,10 +21,12 @@ import { TransformUtils } from "../transform/TransformUtils" import image from "@ohos.multimedia.image" import { LogUtil } from '../../imageknife/utils/LogUtil' import { GPUImageKuwaharaFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class KuwaharaFilterTransform implements BaseTransform { - private _mRadius: number; + private _mRadius: number = 0; constructor(radius: number) { this._mRadius = radius; @@ -37,32 +39,29 @@ export class KuwaharaFilterTransform implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";KuwaharaFilterTransform buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";KuwaharaFilterTransform buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";KuwaharaFilterTransform buf is empty", null); } return; } if (!request.gpuEnabled) { LogUtil.error(Constants.PROJECT_TAG + ";the KuwaharaFilterTransform supported only in GPU mode"); if (func) { - func(Constants.PROJECT_TAG + ";;the KuwaharaFilterTransform supported only in GPU mode", null); + func?.asyncTransform(Constants.PROJECT_TAG + ";;the KuwaharaFilterTransform supported only in GPU mode", null); } return; } - var that = this; - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -70,7 +69,7 @@ export class KuwaharaFilterTransform implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -79,16 +78,16 @@ export class KuwaharaFilterTransform implements BaseTransform { } imageSource.createPixelMap(options) .then((data) => { - that.kuwahara(data, targetWidth, targetHeight, func); + this.kuwahara(data, targetWidth, targetHeight, func); }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - func(e, null); + func?.asyncTransform(e, null); }) - }) + }}) } - private async kuwahara(bitmap: image.PixelMap, targetWidth: number, targetHeight: number, func: AsyncTransform) { + private async kuwahara(bitmap: image.PixelMap, targetWidth: number, targetHeight: number, func?: AsyncTransform) { let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber()); await bitmap.readPixelsToBuffer(bufferData); let filter = new GPUImageKuwaharaFilter(); @@ -96,8 +95,8 @@ export class KuwaharaFilterTransform implements BaseTransform { filter.setRadius(this._mRadius); let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight) bitmap.writeBufferToPixels(buf); - if (func) { - func("success", bitmap); + if (func != undefined) { + func?.asyncTransform("success", bitmap); } } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets index c9e8c98..40328f0 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets @@ -23,9 +23,11 @@ import image from "@ohos.multimedia.image" import resmgr from "@ohos.resourceManager" import { ImageKnifeGlobal } from '../ImageKnifeGlobal' import resourceManager from '@ohos.resourceManager' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class MaskTransformation implements BaseTransform { - private _mResourceData: Resource; + private _mResourceData:Resource|undefined = undefined; constructor(maskBitmap: Resource) { this._mResourceData = maskBitmap; @@ -38,27 +40,27 @@ export class MaskTransformation implements BaseTransform { async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";MaskTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";MaskTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";MaskTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); let imageInfo = await imageSource.getImageInfo(); - let size = { + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("MaskTransformation The image size does not exist."), null) + func?.asyncTransform("MaskTransformation The image size does not exist.", null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -66,7 +68,7 @@ export class MaskTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -77,33 +79,40 @@ export class MaskTransformation implements BaseTransform { .then(data => { this.openInternal(data, targetWidth, targetHeight, func) }) - .catch(e => { - func(e, null); + .catch((e:BusinessError )=> { + func?.asyncTransform(e, null); }) } - private openInternal(bitmap: any, width: number, height: number, func: AsyncTransform) { + private openInternal(bitmap: PixelMap, width: number, height: number, func?: AsyncTransform) { if (!this._mResourceData) { - throw new Error("MaskTransformation resource is empty"); + if(func != undefined){ + func.asyncTransform("MaskTransformation resource is empty", null) + } } - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager).getMediaContent(this._mResourceData.id) - .then(array => { - let buffer = array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset); - var imageSource = image.createImageSource(buffer as any); - var options = { - editable: true, - desiredSize: { - width: width, - height: height - } + let context = (ImageKnifeGlobal.getInstance().getHapContext() as Record) + if(context != undefined){ + let resourceManager = context.resourceManager as resourceManager.ResourceManager + if(resourceManager != undefined && this._mResourceData != undefined) + resourceManager.getMediaContent(this._mResourceData?.id) + .then(array => { + let buffer = array.buffer.slice(array.byteOffset, array.byteLength + array.byteOffset); + let imageSource:image.ImageSource = image.createImageSource(buffer); + let options:image.DecodingOptions = { + editable: true, + desiredSize: { + width: width, + height: height } - imageSource.createPixelMap(options) - .then(maskBitmap => { - MaskUtils.mask(bitmap, maskBitmap, func) - }) - }) - .catch(err => { - func("MaskTransformation openInternal error" + err, null); - }) + } + imageSource.createPixelMap(options) + .then(maskBitmap => { + MaskUtils.mask(bitmap, maskBitmap, func) + }) + }) + .catch((err:BusinessError) => { + func?.asyncTransform("MaskTransformation openInternal error" + err, null); + }) + } } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/PixelationFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/PixelationFilterTransformation.ets index 32705e5..7c45c72 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/PixelationFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/PixelationFilterTransformation.ets @@ -21,6 +21,8 @@ import { TransformUtils } from "../transform/TransformUtils" import { LogUtil } from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" import { pixelUtils } from "../utils/PixelUtils" +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' /** * Applies a Pixelation effect to the image. @@ -42,24 +44,21 @@ export class PixelationFilterTransformation implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";PixelationFilterTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";PixelationFilterTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";PixelationFilterTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size:Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -67,7 +66,7 @@ export class PixelationFilterTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -82,10 +81,10 @@ export class PixelationFilterTransformation implements BaseTransform { pixelUtils.pixel(data, this._mPixel, func); } }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - func(e, null); + func?.asyncTransform(e, null); }) - }) + }}) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/RotateImageTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/RotateImageTransformation.ets index 4fc0325..00f35a5 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/RotateImageTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/RotateImageTransformation.ets @@ -18,11 +18,13 @@ import { Constants } from "../constants/Constants" import { RequestOption } from "../../imageknife/RequestOption" import { TransformUtils } from "../transform/TransformUtils" import {LogUtil} from '../../imageknife/utils/LogUtil' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' import image from "@ohos.multimedia.image" export class RotateImageTransformation implements BaseTransform { - private mDegreesToRotate: number; + private mDegreesToRotate: number = 0; constructor(degreesToRotate: number) { this.mDegreesToRotate = degreesToRotate; @@ -35,24 +37,21 @@ export class RotateImageTransformation implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";RotateImageTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";RotateImageTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";RotateImageTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -60,7 +59,7 @@ export class RotateImageTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, rotate: this.mDegreesToRotate%360, desiredSize: { @@ -70,12 +69,12 @@ export class RotateImageTransformation implements BaseTransform { } imageSource.createPixelMap(options) .then((data) => { - func("", data); + func?.asyncTransform("", data); }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - func(e, null); + func?.asyncTransform(e, null); }) - }) + }}) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/RoundedCornersTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/RoundedCornersTransformation.ets index dca0d44..097ab06 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/RoundedCornersTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/RoundedCornersTransformation.ets @@ -19,23 +19,27 @@ import { Constants } from "../constants/Constants" import { RequestOption } from "../../imageknife/RequestOption" import { TransformUtils } from "../transform/TransformUtils" import {LogUtil} from '../../imageknife/utils/LogUtil' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' import image from "@ohos.multimedia.image" +export interface RoundCorner{ + top_left: number, + top_right: number, + bottom_left: number, + bottom_right: number +} + export class RoundedCornersTransformation implements BaseTransform { private mTop_left: number = 0; private mTop_right: number = 0; private mBottom_left: number = 0; private mBottom_right: number = 0; - private mTransform_pixelMap: any; - private mPoint: ArcPoint[]; + private mTransform_pixelMap: PixelMap|undefined = undefined; + private mPoint: ArcPoint[] = new Array(); - constructor(value: { - top_left?: number, - top_right?: number, - bottom_left?: number, - bottom_right?: number - }) { + constructor(value:RoundCorner) { this.mTop_left = value.top_left; this.mTop_right = value.top_right; this.mBottom_left = value.bottom_left; @@ -54,37 +58,33 @@ export class RoundedCornersTransformation implements BaseTransform { + 'buf is null ='+ (buf == null)); if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";RoundedCornersTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";RoundedCornersTransformation buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";RoundedCornersTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); - var that = this; - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } if (pixelMapHeight < targetHeight) { targetHeight = pixelMapHeight; } - that.transformPixelMap(imageSource, targetWidth, targetHeight, func); - }) + this.transformPixelMap(imageSource, targetWidth, targetHeight, func); + }}) } - private transformPixelMap(imageSource: any, outWith: number, outHeight: number, func?: AsyncTransform) { - var options = { + private transformPixelMap(imageSource: image.ImageSource, outWith: number, outHeight: number, func?: AsyncTransform) { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: outWith, @@ -96,8 +96,8 @@ export class RoundedCornersTransformation implements BaseTransform { this.mTransform_pixelMap = pixelMap; this.mTransform_pixelMap.getImageInfo() .then((data) => { - let width = data.size.width; - let height = data.size.height; + let width:number = data.size.width; + let height:number = data.size.height; if (this.mTop_left > 0) { this.top_left_corners(); } @@ -110,18 +110,18 @@ export class RoundedCornersTransformation implements BaseTransform { if (this.mBottom_right > 0) { this.bottom_right_corners(width, height); } - if (func) { - func("", this.mTransform_pixelMap); + if (func != undefined && this.mTransform_pixelMap != undefined) { + func?.asyncTransform("", this.mTransform_pixelMap); } }) - .catch((error) => { + .catch((error:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + "RoundedCornersTransformation error:" + error); }); }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - if (func) { - func(e, null); + if (func != undefined) { + func?.asyncTransform(e, null); } }) @@ -129,10 +129,10 @@ export class RoundedCornersTransformation implements BaseTransform { private top_left_corners() { this.mPoint = new Array(); - for (var time = 180; time < 270; time++) { - var hudu = (2 * Math.PI / 360) * time; - var x = this.mTop_left + Math.sin(hudu) * this.mTop_left; - var y = this.mTop_left + Math.cos(hudu) * this.mTop_left; + for (let time = 180; time < 270; time++) { + let hudu:number = (2 * Math.PI / 360) * time; + let x:number= this.mTop_left + Math.sin(hudu) * this.mTop_left; + let y:number = this.mTop_left + Math.cos(hudu) * this.mTop_left; this.mPoint.push(new ArcPoint(x, y)); } this.hand_pixel_point(this.mPoint); @@ -140,10 +140,10 @@ export class RoundedCornersTransformation implements BaseTransform { private top_right_corners(width: number) { this.mPoint = new Array(); - for (var time = 0; time < 90; time++) { - var hudu = (2 * Math.PI / 360) * time; - var x = (width - this.mTop_right) + Math.cos(hudu) * this.mTop_right; - var y = this.mTop_right - Math.sin(hudu) * this.mTop_right; + for (let time = 0; time < 90; time++) { + let hudu:number = (2 * Math.PI / 360) * time; + let x:number = (width - this.mTop_right) + Math.cos(hudu) * this.mTop_right; + let y:number = this.mTop_right - Math.sin(hudu) * this.mTop_right; this.mPoint.push(new ArcPoint(x, y)); } @@ -152,10 +152,10 @@ export class RoundedCornersTransformation implements BaseTransform { private bottom_left_corners(width: number, height: number) { this.mPoint = new Array(); - for (var time = 90; time < 180; time++) { - var hudu = (2 * Math.PI / 360) * time; - var x = this.mBottom_left + Math.cos(hudu) * this.mBottom_left; - var y = height - this.mBottom_left + Math.sin(hudu) * this.mBottom_left; + for (let time = 90; time < 180; time++) { + let hudu = (2 * Math.PI / 360) * time; + let x = this.mBottom_left + Math.cos(hudu) * this.mBottom_left; + let y = height - this.mBottom_left + Math.sin(hudu) * this.mBottom_left; this.mPoint.push(new ArcPoint(x, y)); } this.hand_pixel_point(this.mPoint); @@ -163,25 +163,25 @@ export class RoundedCornersTransformation implements BaseTransform { private bottom_right_corners(width: number, height: number) { this.mPoint = new Array(); - for (var time = 0; time < 90; time++) { - var hudu = (2 * Math.PI / 360) * time; - var x = width - this.mBottom_right + Math.cos(hudu) * this.mBottom_right; - var y = height - this.mBottom_right + Math.sin(hudu) * this.mBottom_right; + for (let time = 0; time < 90; time++) { + let hudu = (2 * Math.PI / 360) * time; + let x = width - this.mBottom_right + Math.cos(hudu) * this.mBottom_right; + let y = height - this.mBottom_right + Math.sin(hudu) * this.mBottom_right; this.mPoint.push(new ArcPoint(x, y)); } this.hand_right_pixel_point(this.mPoint, width); } private hand_pixel_point(points: ArcPoint[]) { - for (var index = 0; index < points.length; index++) { + for (let index = 0; index < points.length; index++) { const element = points[index]; let x = element.getX(); let y = element.getY(); - for (var i = 0; i <= x; i++) { - var buffer1 = new ArrayBuffer(5); - var bytes1 = new Uint8Array(buffer1); - var writePositionRen = { + for (let i = 0; i <= x; i++) { + let buffer1 = new ArrayBuffer(5); + let bytes1 = new Uint8Array(buffer1); + let writePositionRen:image.PositionArea = { pixels: buffer1, offset: 1, stride: 1024, @@ -193,21 +193,23 @@ export class RoundedCornersTransformation implements BaseTransform { for (let j = 0;j < 5; j++) { bytes1[j] = 0; } - this.mTransform_pixelMap.writePixels(writePositionRen); + if(this.mTransform_pixelMap != undefined) { + this.mTransform_pixelMap.writePixels(writePositionRen); + } } } } private hand_right_pixel_point(points: ArcPoint[], width: number) { - for (var index = 0; index < points.length; index++) { + for (let index = 0; index < points.length; index++) { const element = points[index]; let x = element.getX(); let y = element.getY(); - for (var i = x; i <= width; i++) { - var buffer1 = new ArrayBuffer(5); - var bytes1 = new Uint8Array(buffer1); - var writePositionRen = { + for (let i = x; i <= width; i++) { + let buffer1 = new ArrayBuffer(5); + let bytes1 = new Uint8Array(buffer1); + let writePositionRen:image.PositionArea = { pixels: buffer1, offset: 0, stride: 4, @@ -219,7 +221,9 @@ export class RoundedCornersTransformation implements BaseTransform { for (let j = 0;j < 5; j++) { bytes1[j] = 0; } - this.mTransform_pixelMap.writePixels(writePositionRen); + if(this.mTransform_pixelMap != undefined) { + this.mTransform_pixelMap.writePixels(writePositionRen); + } } } } diff --git a/imageknife/src/main/ets/components/imageknife/transform/SepiaFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/SepiaFilterTransformation.ets index eee5d66..72fbe75 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/SepiaFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/SepiaFilterTransformation.ets @@ -20,6 +20,8 @@ import { RequestOption } from "../../imageknife/RequestOption" import { LogUtil } from '../../imageknife/utils/LogUtil' import image from "@ohos.multimedia.image" import { GPUImageSepiaToneFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' /** * Applies a simple sepia effect. @@ -34,28 +36,28 @@ export class SepiaFilterTransformation implements BaseTransform { async transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";SepiaFilterTransformation buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";SepiaFilterTransformation buf is empty", null); + if (func!=undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";SepiaFilterTransformation buf is empty", null); } return; } - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); - let imageInfo = await imageSource.getImageInfo(); - let size = { + let imageInfo:image.ImageInfo = await imageSource.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("SepiaFilterTransformation The image size does not exist."), null) + func?.asyncTransform("SepiaFilterTransformation The image size does not exist.", null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -63,14 +65,14 @@ export class SepiaFilterTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, height: targetHeight } } - let data = await imageSource.createPixelMap(options); + let data:PixelMap = await imageSource.createPixelMap(options); let bufferData = new ArrayBuffer(data.getPixelBytesNumber()); await data.readPixelsToBuffer(bufferData); @@ -80,21 +82,21 @@ export class SepiaFilterTransformation implements BaseTransform { filter.setImageData(bufferData, targetWidth, targetHeight); let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight); data.writeBufferToPixels(buf); - if (func) { - func("success", data); + if (func != undefined) { + func?.asyncTransform("success", data); } return; } let bufferNewData = new ArrayBuffer(data.getPixelBytesNumber()); - var dataArray = new Uint8Array(bufferData); - var dataNewArray = new Uint8Array(bufferNewData); + let dataArray = new Uint8Array(bufferData); + let dataNewArray = new Uint8Array(bufferNewData); for (let index = 0; index < dataArray.length; index += 4) { - const r = dataArray[index]; - const g = dataArray[index+1]; - const b = dataArray[index+2]; - const f = dataArray[index+3]; + const r:number = dataArray[index]; + const g:number = dataArray[index+1]; + const b:number = dataArray[index+2]; + const f:number = dataArray[index+3]; dataNewArray[index+2] = this.checkVisAble(this.colorBlend(this.noise() , (r * 0.272) + (g * 0.534) + (b * 0.131) @@ -109,8 +111,8 @@ export class SepiaFilterTransformation implements BaseTransform { } await data.writeBufferToPixels(bufferNewData); - if (func) { - func("", data); + if (func != undefined) { + func?.asyncTransform("", data); } } diff --git a/imageknife/src/main/ets/components/imageknife/transform/SketchFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/SketchFilterTransformation.ets index aa3dbf7..1b3d72d 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/SketchFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/SketchFilterTransformation.ets @@ -20,6 +20,8 @@ import { RequestOption } from '../../imageknife/RequestOption' import { TransformUtils } from '../transform/TransformUtils' import image from '@ohos.multimedia.image' import { CalculatePixelUtils } from '../utils/CalculatePixelUtils' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class SketchFilterTransformation implements BaseTransform { getName() { @@ -28,25 +30,21 @@ export class SketchFilterTransformation implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { - throw new Error(Constants.PROJECT_TAG + ';SketchFilterTransformation buf is empty'); - if (func) { - func(Constants.PROJECT_TAG + ';SketchFilterTransformation buf is empty', null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ';SketchFilterTransformation buf is empty', null); } return; } - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth: number = size.width; + let pixelMapHeight: number = size.height; + let targetWidth: number = request.size.width; + let targetHeight: number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -54,7 +52,7 @@ export class SketchFilterTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options: image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -69,9 +67,9 @@ export class SketchFilterTransformation implements BaseTransform { CalculatePixelUtils.sketch(data, func); } }) - .catch((e) => { - func(e, null); + .catch((e:BusinessError) => { + func?.asyncTransform(e, null); }) - }) + }}) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/SwirlFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/SwirlFilterTransformation.ets index 891f315..bc2b174 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/SwirlFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/SwirlFilterTransformation.ets @@ -23,6 +23,8 @@ import { PixelEntry } from '../entry/PixelEntry' import { ColorUtils } from '../utils/ColorUtils' import { CalculatePixelUtils } from '../utils/CalculatePixelUtils' import { GPUImageSwirlFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class SwirlFilterTransformation implements BaseTransform { private radius: number = 0; @@ -47,25 +49,21 @@ export class SwirlFilterTransformation implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { - throw new Error(Constants.PROJECT_TAG + ';SwirlFilterTransformation buf is empty'); - if (func) { - func(Constants.PROJECT_TAG + ';SwirlFilterTransformation buf is empty', null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ';SwirlFilterTransformation buf is empty', null); } return; } - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource,{asyncTransform: (error:BusinessError|string, size:Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -73,7 +71,7 @@ export class SwirlFilterTransformation implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -84,23 +82,23 @@ export class SwirlFilterTransformation implements BaseTransform { .then((data) => { this.swirl(data, this.radius, request, func); }) - .catch((e) => { - func(e, null); + .catch((e:BusinessError) => { + func?.asyncTransform(e, null); }) - }) + }}) } private async swirl(bitmap: image.PixelMap, degree: number, request: RequestOption, func?: AsyncTransform) { - let imageInfo = await bitmap.getImageInfo(); - let size = { + let imageInfo:image.ImageInfo = await bitmap.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { return; } - let width = size.width; - let height = size.height; + let width:number = size.width; + let height:number = size.height; let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber()); @@ -113,8 +111,8 @@ export class SwirlFilterTransformation implements BaseTransform { filter.setCenter(this._xCenter, this._yCenter) let buf = await filter.getPixelMapBuf(0, 0, width, height); bitmap.writeBufferToPixels(buf); - if (func) { - func("success", bitmap); + if (func != undefined) { + func?.asyncTransform("success", bitmap); } return; } @@ -125,13 +123,13 @@ export class SwirlFilterTransformation implements BaseTransform { let dataArray = new Uint8Array(bufferData); - let ph = 0; - let pw = 0; + let ph:number = 0; + let pw:number = 0; for (let index = 0; index < dataArray.length; index += 4) { - const r = dataArray[index]; - const g = dataArray[index+1]; - const b = dataArray[index+2]; - const f = dataArray[index+3]; + const r:number = dataArray[index]; + const g:number = dataArray[index+1]; + const b:number = dataArray[index+2]; + const f:number = dataArray[index+3]; let entry = new PixelEntry(); entry.a = 0; @@ -201,8 +199,8 @@ export class SwirlFilterTransformation implements BaseTransform { index++; } await bitmap.writeBufferToPixels(bufferNewData); - if (func) { - func("", bitmap); + if (func != undefined) { + func?.asyncTransform("", bitmap); } } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/ToonFilterTransform.ets b/imageknife/src/main/ets/components/imageknife/transform/ToonFilterTransform.ets index 90e1647..7c7d83d 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/ToonFilterTransform.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/ToonFilterTransform.ets @@ -21,7 +21,8 @@ import { TransformUtils } from "../transform/TransformUtils" import image from "@ohos.multimedia.image" import { LogUtil } from '../../imageknife/utils/LogUtil' import { GPUImageToonFilter } from '@ohos/gpu_transform' - +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class ToonFilterTransform implements BaseTransform { private threshold: number = 0.2; @@ -43,32 +44,29 @@ export class ToonFilterTransform implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";ToonFilterTransform buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";ToonFilterTransform buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";ToonFilterTransform buf is empty", null); } return; } if (!request.gpuEnabled) { LogUtil.error(Constants.PROJECT_TAG + ";the ToonFilterTransform supported only in GPU mode"); if (func) { - func(Constants.PROJECT_TAG + ";the ToonFilterTransform supported only in GPU mode", null); + func?.asyncTransform(Constants.PROJECT_TAG + ";the ToonFilterTransform supported only in GPU mode", null); } return; } - var that = this; - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -76,7 +74,7 @@ export class ToonFilterTransform implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -85,16 +83,16 @@ export class ToonFilterTransform implements BaseTransform { } imageSource.createPixelMap(options) .then((data) => { - that.toon(data, targetWidth, targetHeight, func); + this.toon(data, targetWidth, targetHeight, func); }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - func(e, null); + func?.asyncTransform(e, null); }) - }) + }}) } - private async toon(bitmap: image.PixelMap, targetWidth: number, targetHeight: number, func: AsyncTransform) { + private async toon(bitmap: image.PixelMap, targetWidth: number, targetHeight: number, func?: AsyncTransform) { let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber()); await bitmap.readPixelsToBuffer(bufferData); let filter = new GPUImageToonFilter(); @@ -103,8 +101,8 @@ export class ToonFilterTransform implements BaseTransform { filter.setQuantizationLevels(this.quantizationLevels); let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight) bitmap.writeBufferToPixels(buf); - if (func) { - func("success", bitmap); + if (func != undefined) { + func?.asyncTransform("success", bitmap); } } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets b/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets index 14653b9..1cd859f 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets @@ -14,18 +14,19 @@ */ import {AsyncTransform} from '../transform/AsyncTransform' import image from '@ohos.multimedia.image' - +import {Size} from '../../imageknife/RequestOption' +import { BusinessError } from '@ohos.base' export class TransformUtils { static centerCrop(buf: ArrayBuffer, outWidth: number, outHeihgt: number, callback?: AsyncTransform>) { - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); imageSource.getImageInfo() .then((p) => { - var sw; - var sh; - var scale; - var pw = p.size.width; - var ph = p.size.height; + let sw:number=0; + let sh:number=0; + let scale:number=1; + let pw:number = p.size.width; + let ph:number = p.size.height; if (pw == outWidth && ph == outHeihgt) { sw = outWidth; sh = outHeihgt; @@ -38,7 +39,7 @@ export class TransformUtils { sw = pw * scale; sh = ph * scale; } - var options = { + let options:image.DecodingOptions = { editable: true, rotate: 0, desiredRegion: { size: { width: sw, height: sh }, @@ -47,18 +48,18 @@ export class TransformUtils { }, } if (callback) { - callback('', imageSource.createPixelMap(options)); + callback.asyncTransform('', imageSource.createPixelMap(options)); } }) - .catch((error) => { - callback(error, null); + .catch((error:BusinessError) => { + callback?.asyncTransform(error, null); }) } static rotateImage(buf: ArrayBuffer, degreesToRotate: number): Promise{ - var imageSource = image.createImageSource(buf as any); - var options = { + let imageSource:image.ImageSource = image.createImageSource(buf); + let options:image.DecodingOptions = { editable: true, rotate: degreesToRotate } @@ -67,36 +68,36 @@ export class TransformUtils { static centerInside(buf: ArrayBuffer, outWidth: number, outHeihgt: number, callback?: AsyncTransform>) { - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); imageSource.getImageInfo() - .then((p) => { - var pw = p.size.width; - var ph = p.size.height; + .then((p:image.ImageInfo) => { + let pw = p.size.width; + let ph = p.size.height; if (pw <= outWidth && ph <= outHeihgt) { - callback('', imageSource.createPixelMap()); + callback?.asyncTransform('', imageSource.createPixelMap()); } else { - this.fitCenter(buf, outWidth, outHeihgt, callback); + TransformUtils.fitCenter(buf, outWidth, outHeihgt, callback); } }) - .catch((error) => { - callback(error, null); + .catch((error:BusinessError) => { + callback?.asyncTransform(error, null); }) } static fitCenter(buf: ArrayBuffer, outWidth: number, outHeihgt: number , callback?: AsyncTransform>) { - var imageSource = image.createImageSource(buf as any); + let imageSource:image.ImageSource = image.createImageSource(buf); imageSource.getImageInfo() - .then((p) => { - var pw = p.size.width; - var ph = p.size.height; - var widthPercentage = outWidth / pw; - var heightPercentage = outHeihgt / ph; - var minPercentage = Math.min(widthPercentage, heightPercentage); + .then((p:image.ImageInfo) => { + let pw:number = p.size.width; + let ph:number = p.size.height; + let widthPercentage:number = outWidth / pw; + let heightPercentage:number = outHeihgt / ph; + let minPercentage:number = Math.min(widthPercentage, heightPercentage); - var targetWidth = Math.round(minPercentage * pw); - var targetHeight = Math.round(minPercentage * ph); + let targetWidth:number = Math.round(minPercentage * pw); + let targetHeight:number = Math.round(minPercentage * ph); if (pw == targetWidth && ph == targetHeight) { targetWidth = pw; @@ -105,37 +106,34 @@ export class TransformUtils { targetWidth = minPercentage * pw; targetHeight = minPercentage * ph; } - var options = { + let options:image.DecodingOptions = { editable: true, rotate: 0, desiredSize: { width: targetWidth, height: targetHeight } } if (callback) { - callback('', imageSource.createPixelMap(options)); + callback.asyncTransform('', imageSource.createPixelMap(options)); } }) - .catch(e => { + .catch((e:BusinessError) => { if (callback) { - callback(e, null); + callback.asyncTransform(e, null); } }) } - static getPixelMapSize(imageSource: any, func: AsyncTransform<{ - width: number, - height: number - }>) { + static getPixelMapSize(imageSource: image.ImageSource, func: AsyncTransform) { if (!imageSource) { return; } - imageSource.getImageInfo((err, value) => { + imageSource.getImageInfo((err:BusinessError, value:image.ImageInfo) => { if (err) { - func(err, null) + func?.asyncTransform(err, null) return; } - var pWidth = value.size.width; - var pHeight = value.size.height; - func('', { width: pWidth, height: pHeight }); + let pWidth:number = value.size.width; + let pHeight:number = value.size.height; + func?.asyncTransform('', { width: pWidth, height: pHeight }); }) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/VignetteFilterTransform.ets b/imageknife/src/main/ets/components/imageknife/transform/VignetteFilterTransform.ets index 4f34dbc..c49897d 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/VignetteFilterTransform.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/VignetteFilterTransform.ets @@ -21,6 +21,8 @@ import { TransformUtils } from "../transform/TransformUtils" import image from "@ohos.multimedia.image" import { LogUtil } from '../../imageknife/utils/LogUtil' import { GPUImageVignetterFilter } from '@ohos/gpu_transform' +import { BusinessError } from '@ohos.base' +import {Size} from '../../imageknife/RequestOption' export class VignetteFilterTransform implements BaseTransform { @@ -47,32 +49,28 @@ export class VignetteFilterTransform implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { LogUtil.log(Constants.PROJECT_TAG + ";VignetteFilterTransform buf is empty"); - if (func) { - func(Constants.PROJECT_TAG + ";VignetteFilterTransform buf is empty", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";VignetteFilterTransform buf is empty", null); } return; } if (!request.gpuEnabled) { LogUtil.error(Constants.PROJECT_TAG + ";the VignetteFilterTransform supported only in GPU mode"); - if (func) { - func(Constants.PROJECT_TAG + ";the VignetteFilterTransform supported only in GPU mode", null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ";the VignetteFilterTransform supported only in GPU mode", null); } return; } - var that = this; - var imageSource = image.createImageSource(buf as any); - TransformUtils.getPixelMapSize(imageSource, (error, size: { - width: number, - height: number - }) => { + let imageSource:image.ImageSource = image.createImageSource(buf); + TransformUtils.getPixelMapSize(imageSource, {asyncTransform:(error:BusinessError|string, size: Size|null) => { if (!size) { - func(error, null) + func?.asyncTransform(error, null) return; } - var pixelMapWidth = size.width; - var pixelMapHeight = size.height; - var targetWidth = request.size.width; - var targetHeight = request.size.height; + let pixelMapWidth:number = size.width; + let pixelMapHeight:number = size.height; + let targetWidth:number = request.size.width; + let targetHeight:number = request.size.height; if (pixelMapWidth < targetWidth) { targetWidth = pixelMapWidth; } @@ -80,7 +78,7 @@ export class VignetteFilterTransform implements BaseTransform { targetHeight = pixelMapHeight; } - var options = { + let options:image.DecodingOptions = { editable: true, desiredSize: { width: targetWidth, @@ -89,16 +87,16 @@ export class VignetteFilterTransform implements BaseTransform { } imageSource.createPixelMap(options) .then((data) => { - that.vignette(data, targetWidth, targetHeight, func); + this.vignette(data, targetWidth, targetHeight, func); }) - .catch((e) => { + .catch((e:BusinessError) => { LogUtil.log(Constants.PROJECT_TAG + ";error:" + e); - func(e, null); + func?.asyncTransform(e, null); }) - }) + }}) } - private async vignette(bitmap: image.PixelMap, targetWidth: number, targetHeight: number, func: AsyncTransform) { + private async vignette(bitmap: image.PixelMap, targetWidth: number, targetHeight: number, func?: AsyncTransform) { let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber()); await bitmap.readPixelsToBuffer(bufferData); let filter = new GPUImageVignetterFilter(); @@ -109,8 +107,8 @@ export class VignetteFilterTransform implements BaseTransform { filter.setVignetteEnd(this.vignetteSpace[1]); let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight) bitmap.writeBufferToPixels(buf); - if (func) { - func("success", bitmap); + if (func != undefined) { + func?.asyncTransform("success", bitmap); } } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterCrop.ets b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterCrop.ets index 28349dc..01b8b5d 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterCrop.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterCrop.ets @@ -18,7 +18,7 @@ import {AsyncTransform} from '../AsyncTransform' import {Constants} from '../../constants/Constants' import {TransformUtils} from '../TransformUtils' import {RequestOption} from '../../../imageknife/RequestOption' - +import { BusinessError } from '@ohos.base' export class CenterCrop implements BaseTransform { getName() { return 'CenterCrop:' + this; @@ -26,18 +26,17 @@ export class CenterCrop implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { - throw new Error(Constants.PROJECT_TAG + ';CenterCrop buf is empty'); - if (func) { - func(Constants.PROJECT_TAG + ';CenterCrop buf is empty', null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ';CenterCrop buf is empty', null); } return; } - TransformUtils.centerCrop(buf, request.size.width, request.size.height, (error, data) => { - data.then(p => { - func('', p); - }).catch(e => { - func(Constants.PROJECT_TAG + ';CenterCrop error:' + e, null); + TransformUtils.centerCrop(buf, request.size.width, request.size.height, {asyncTransform:(error:BusinessError|string, data:Promise|null) => { + data?.then(p => { + func?.asyncTransform('', p); + }).catch((e:BusinessError) => { + func?.asyncTransform(Constants.PROJECT_TAG + ';CenterCrop error:' + e, null); }) - }) + }}) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterInside.ets b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterInside.ets index c3b8b43..016ee2d 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterInside.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterInside.ets @@ -13,12 +13,12 @@ * limitations under the License. */ -import {BaseTransform} from '../BaseTransform' +import {BaseTransform} from '../BaseTransform' import {AsyncTransform} from '../AsyncTransform' import {Constants} from '../../constants/Constants' import {TransformUtils} from '../TransformUtils' import {RequestOption} from '../../../imageknife/RequestOption' - +import { BusinessError } from '@ohos.base' export class CenterInside implements BaseTransform { getName() { return 'CenterInside:' + this; @@ -26,18 +26,17 @@ export class CenterInside implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { - throw new Error(Constants.PROJECT_TAG + ';CenterInside buf is empty'); - if (func) { - func(Constants.PROJECT_TAG + ';CenterInside buf is empty', null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ';CenterInside buf is empty', null); } return; } - TransformUtils.centerInside(buf, request.size.width, request.size.height, (error, data) => { - data.then(p => { - func('', p); - }).catch(e => { - func(Constants.PROJECT_TAG + ';CenterInside error:' + e, null); + TransformUtils.centerInside(buf, request.size.width, request.size.height, {asyncTransform:(error:BusinessError|string, data:Promise|null) => { + data?.then(p => { + func?.asyncTransform('', p); + }).catch((e:BusinessError) => { + func?.asyncTransform(Constants.PROJECT_TAG + ';CenterInside error:' + e, null); }) - }) + }}) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/FitCenter.ets b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/FitCenter.ets index 2330b0d..b820ba0 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/FitCenter.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/FitCenter.ets @@ -18,7 +18,7 @@ import {AsyncTransform} from '../AsyncTransform' import {Constants} from '../../constants/Constants' import {TransformUtils} from '../TransformUtils' import {RequestOption} from '../../../imageknife/RequestOption' - +import { BusinessError } from '@ohos.base' export class FitCenter implements BaseTransform { getName() { return 'FitCenter:' + this; @@ -26,18 +26,17 @@ export class FitCenter implements BaseTransform { transform(buf: ArrayBuffer, request: RequestOption, func?: AsyncTransform) { if (!buf || buf.byteLength <= 0) { - throw new Error(Constants.PROJECT_TAG + ';FitCenter buf is empty'); - if (func) { - func(Constants.PROJECT_TAG + ';FitCenter buf is empty', null); + if (func != undefined) { + func?.asyncTransform(Constants.PROJECT_TAG + ';FitCenter buf is empty', null); } return; } - TransformUtils.fitCenter(buf, request.size.width, request.size.height, (error, data) => { - data.then(p => { - func('', p); - }).catch(e => { - func(Constants.PROJECT_TAG + ';FitCenter error:' + e, null); + TransformUtils.fitCenter(buf, request.size.width, request.size.height, {asyncTransform:(error:BusinessError|string, data:Promise|null) => { + data?.then(p => { + func?.asyncTransform('', p); + }).catch((e:BusinessError) => { + func?.asyncTransform(Constants.PROJECT_TAG + ';FitCenter error:' + e, null); }) - }) + }}) } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets index e9d5300..119bd3b 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets @@ -16,16 +16,17 @@ import { PixelEntry } from "../entry/PixelEntry" import { AsyncTransform } from "../transform/AsyncTransform" import { ColorUtils } from "./ColorUtils" import { GPUImageSketchFilter } from '@ohos/gpu_transform' +import image from '@ohos.multimedia.image' export namespace CalculatePixelUtils { - export async function sketch(p: any, func: AsyncTransform) { + export async function sketch(p: PixelMap, func?: AsyncTransform) { let imageInfo = await p.getImageInfo(); let size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("sketch The image size does not exist."), null) + func.asyncTransform("sketch The image size does not exist.", null) return; } @@ -91,8 +92,8 @@ export namespace CalculatePixelUtils { } await p.writeBufferToPixels(bufferNewData); - if (func) { - func("success", p); + if (func != undefined) { + func.asyncTransform("success", p); } } @@ -298,14 +299,14 @@ export namespace CalculatePixelUtils { return array; } - export async function sketchGpu(p: any, func: AsyncTransform) { - let imageInfo = await p.getImageInfo(); + export async function sketchGpu(p: PixelMap, func?: AsyncTransform) { + let imageInfo:image.ImageInfo = await p.getImageInfo(); let size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("sketch The image size does not exist."), null) + func?.asyncTransform("sketch The image size does not exist.", null) return; } @@ -318,8 +319,8 @@ export namespace CalculatePixelUtils { filter.setImageData(bufferData, w, h); filter.getPixelMapBuf(0, 0, w, h).then((buf) => { p.writeBufferToPixels(buf); - if (func) { - func("success", p); + if (func!=undefined) { + func.asyncTransform("success", p); } }) } diff --git a/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets b/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets index 568b5cc..d85e8bb 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets @@ -18,11 +18,12 @@ import {PixelEntry} from "../entry/PixelEntry" import {AsyncTransform} from "../transform/AsyncTransform" import {ColorUtils} from "./ColorUtils" import { GPUImageBlurFilter } from '@ohos/gpu_transform' - +import {Size} from '../../imageknife/RequestOption' +import image from '@ohos.multimedia.image'; export namespace fastBlur { - export async function blur(bitmap: any, radius: number, canReuseInBitmap: boolean, func: AsyncTransform) { + export async function blur(bitmap: PixelMap, radius: number, canReuseInBitmap: boolean, func?: AsyncTransform) { // http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html @@ -52,25 +53,25 @@ export namespace fastBlur { // if (radius < 1) { - func("error,radius must be greater than 1 ", null); + func?.asyncTransform("error,radius must be greater than 1 ", null); return; } let imageInfo = await bitmap.getImageInfo(); - let size = { + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("fastBlur The image size does not exist."), null) + func?.asyncTransform("fastBlur The image size does not exist.", null) return; } let w = size.width; let h = size.height; - var pixEntry: Array = new Array() - var pix: Array = new Array() + let pixEntry: Array = new Array() + let pix: Array = new Array() let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber()); @@ -103,7 +104,17 @@ export namespace fastBlur { let g = CalculatePixelUtils.createIntArray(wh); let b = CalculatePixelUtils.createIntArray(wh); - let rsum, gsum, bsum, x, y, i, p, yp, yi, yw: number; + let rsum:number = 0; + let gsum:number = 0; + let bsum:number = 0; + let x:number = 0; + let y:number = 0; + let i:number = 0; + let p:number = 0; + let yp:number = 0; + let yi:number = 0; + let yw: number = 0; + let vmin = CalculatePixelUtils.createIntArray(Math.max(w, h)); let divsum = (div + 1) >> 1; @@ -115,7 +126,15 @@ export namespace fastBlur { yw = yi = 0; let stack = CalculatePixelUtils.createInt2DArray(div, 3); - let stackpointer, stackstart, rbs, routsum, goutsum, boutsum, rinsum, ginsum, binsum: number; + let stackpointer:number=0; + let stackstart:number=0; + let rbs:number=0; + let routsum:number=0; + let goutsum:number=0; + let boutsum:number=0; + let rinsum:number=0; + let ginsum:number=0; + let binsum:number=0; let sir: Array; let r1 = radius + 1; for (y = 0; y < h; y++) { @@ -286,29 +305,29 @@ export namespace fastBlur { index++; } await bitmap.writeBufferToPixels(bufferNewData); - if (func) { - func("success", bitmap); + if (func != undefined) { + func?s.asyncTransform("success", bitmap); } } - export async function blurGPU(bitmap: any, radius: number, canReuseInBitmap: boolean, func: AsyncTransform) { + export async function blurGPU(bitmap: PixelMap, radius: number, canReuseInBitmap: boolean, func?: AsyncTransform) { if (radius < 1) { - func("error,radius must be greater than 1 ", null); + func?.asyncTransform("error,radius must be greater than 1 ", null); return; } - let imageInfo = await bitmap.getImageInfo(); - let size = { + let imageInfo:image.ImageInfo = await bitmap.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("fastBlur The image size does not exist."), null) + func?.asyncTransform("fastBlur The image size does not exist.", null) return; } - let w = size.width; - let h = size.height; + let w:number = size.width; + let h:number = size.height; let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber()); await bitmap.readPixelsToBuffer(bufferData); @@ -318,8 +337,8 @@ export namespace fastBlur { filter.setBlurOffset([1.0, 1.0]) filter.getPixelMapBuf(0, 0, w, h).then((buf) => { bitmap.writeBufferToPixels(buf); - if (func) { - func("success", bitmap); + if (func != undefined) { + func?.asyncTransform("success", bitmap); } }) } diff --git a/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets index 2895fc0..65d5da6 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets @@ -17,23 +17,25 @@ import {CalculatePixelUtils} from "./CalculatePixelUtils" import {PixelEntry} from "../entry/PixelEntry" import {AsyncTransform} from "../transform/AsyncTransform" import {ColorUtils} from "./ColorUtils" +import {Size} from "../../imageknife/RequestOption" import {GPUImagePixelationFilter} from '@ohos/gpu_transform' +import image from '@ohos.multimedia.image'; export namespace pixelUtils { - export async function pixel(bitmap: any, pixel: number, func: AsyncTransform) { + export async function pixel(bitmap: PixelMap, pixel: number, func?: AsyncTransform) { - let imageInfo = await bitmap.getImageInfo(); - let size = { + let imageInfo:image.ImageInfo= await bitmap.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("GrayscaleTransformation The image size does not exist."), null) + func.asyncTransform("GrayscaleTransformation The image size does not exist.", null) return; } - let targetWidth = size.width; - let targetHeight = size.height; + let targetWidth:number = size.width; + let targetHeight:number = size.height; var pixEntry: Array = new Array() let inPixels: Array> = CalculatePixelUtils.createInt2DArray(targetHeight, targetWidth); @@ -42,8 +44,8 @@ export namespace pixelUtils { await bitmap.readPixelsToBuffer(bufferData); let dataArray = new Uint8Array(bufferData); - let ph = 0; - let pw = 0; + let ph:number = 0; + let pw:number = 0; for (let index = 0; index < dataArray.length; index += 4) { @@ -127,18 +129,18 @@ export namespace pixelUtils { } await bitmap.writeBufferToPixels(bufferNewData); if (func) { - func("success", bitmap); + func?.asyncTransform("success", bitmap); } } - export async function pixelGPU(bitmap: any, pixel: number, func: AsyncTransform) { + export async function pixelGPU(bitmap: any, pixel: number, func?: AsyncTransform) { let imageInfo = await bitmap.getImageInfo(); - let size = { + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } if (!size) { - func(new Error("GrayscaleTransformation The image size does not exist."), null) + func?.asyncTransform("GrayscaleTransformation The image size does not exist.", null) return; } let w = size.width; @@ -151,8 +153,8 @@ export namespace pixelUtils { filter.setPixel(pixel) filter.getPixelMapBuf(0, 0, w, h).then((buf) => { bitmap.writeBufferToPixels(buf); - if (func) { - func("success", bitmap); + if (func!=undefined) { + func?.asyncTransform("success", bitmap); } }) } From 9fedc69e8e52fbd1f0c296b0e522c6c3e5968b03 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Wed, 20 Sep 2023 14:39:59 +0800 Subject: [PATCH 13/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B913=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife->util?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../imageknife/utils/CalculatePixelUtils.ets | 72 +++++++++--- .../imageknife/utils/ColorUtils.ets | 6 +- .../imageknife/utils/FileTypeUtil.ets | 26 +++-- .../components/imageknife/utils/K2DArray.ets | 8 +- .../components/imageknife/utils/LogUtil.ets | 10 +- .../components/imageknife/utils/MaskUtils.ets | 11 +- .../imageknife/utils/ParseImageUtil.ets | 6 +- .../imageknife/utils/PixelUtils.ets | 14 +-- .../imageknife/utils/gif/GIFFrame.ts | 16 +-- .../imageknife/utils/gif/GIFParseImpl.ets | 110 ++++++++++-------- .../imageknife/utils/svg/IParseSvg.ets | 3 +- 11 files changed, 170 insertions(+), 112 deletions(-) diff --git a/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets index 119bd3b..f7b25e1 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets @@ -17,6 +17,7 @@ import { AsyncTransform } from "../transform/AsyncTransform" import { ColorUtils } from "./ColorUtils" import { GPUImageSketchFilter } from '@ohos/gpu_transform' import image from '@ohos.multimedia.image' +import { Size } from '../RequestOption' export namespace CalculatePixelUtils { export async function sketch(p: PixelMap, func?: AsyncTransform) { @@ -26,16 +27,19 @@ export namespace CalculatePixelUtils { height: imageInfo.size.height } if (!size) { - func.asyncTransform("sketch The image size does not exist.", null) + func?.asyncTransform("sketch The image size does not exist.", null) return; } - let pos, row, col, clr: number; - let width = size.width; - let height = size.height; - var pixEntry: Array = new Array() - var pixSrc: Array = new Array() - var pixNvt: Array = new Array() + let pos: number = 0 + let row: number = 0 + let col: number = 0 + let clr: number = 0 + let width: number = size.width; + let height: number = size.height; + let pixEntry: Array = new Array() + let pixSrc: Array = new Array() + let pixNvt: Array = new Array() let bufferData = new ArrayBuffer(p.getPixelBytesNumber()); await p.readPixelsToBuffer(bufferData); @@ -97,10 +101,32 @@ export namespace CalculatePixelUtils { } } - var gaussGray = (psrc: Array, horz: number, vert: number, + let gaussGray = (psrc: Array, horz: number, vert: number, width: number, height: number): number => { - let dst, src, n_p, n_m, d_p, d_m, bd_p, bd_m, val_p, val_m, initial_p, initial_m: Array; - let i, j, t, k, row, col, terms, std_dev, sp_p_idx, sp_m_idx, vp_idx, vm_idx: number; + let dst: Array; + let src: Array; + let n_p: Array; + let n_m: Array; + let d_p: Array; + let d_m: Array; + let bd_p: Array; + let bd_m: Array; + let val_p: Array; + let val_m: Array; + let initial_p: Array; + let initial_m: Array; + let i: number; + let j: number; + let t: number; + let k: number; + let row: number; + let col: number; + let terms: number; + let std_dev: number; + let sp_p_idx: number; + let sp_m_idx: number; + let vp_idx: number; + let vm_idx: number; let row_stride = width; let max_len = Math.max(width, height); val_p = createIntArray(max_len); @@ -205,7 +231,7 @@ export namespace CalculatePixelUtils { return 0; } - var findConstants = (n_p: Array, n_m: Array, d_p: Array, + let findConstants = (n_p: Array, n_m: Array, d_p: Array, d_m: Array, bd_p: Array , bd_m: Array, std_dev: number) => { let div = Math.sqrt(2 * 3.141593) * std_dev; @@ -217,7 +243,7 @@ export namespace CalculatePixelUtils { let x5 = 3.735 / div; let x6 = -0.6803 / div; let x7 = -0.2598 / div; - let i; + let i: number; n_p[0] = x4 + x6; n_p[1] = (Math.exp(x1) * (x7 * Math.sin(x3) - (x6 + 2 * x4) * Math.cos(x3)) + Math @@ -247,7 +273,11 @@ export namespace CalculatePixelUtils { for (i = 1; i <= 4; i++) { n_m[i] = n_p[i] - d_p[i] * n_p[0]; } - let sum_n_p, sum_n_m, sum_d, a, b: number; + let sum_n_p: number; + let sum_n_m: number; + let sum_d: number; + let a: number; + let b: number; sum_n_p = 0.0; sum_n_m = 0.0; sum_d = 0.0; @@ -264,9 +294,13 @@ export namespace CalculatePixelUtils { } } - var transferGaussPixels = (src1: Array, src2: Array, + let transferGaussPixels = (src1: Array, src2: Array, dest: Array, bytes: number, width: number) => { - let i, j, k, b, sum: number; + let i: number; + let j: number; + let k: number; + let b: number; + let sum: number; let bend = bytes * width; i = j = k = 0; for (b = 0; b < bend; b++) { @@ -281,7 +315,7 @@ export namespace CalculatePixelUtils { export function createIntArray(len: number): Array { let array = new Array(); - for (var index = 0; index < len; index++) { + for (let index = 0; index < len; index++) { array.push(0); } return array; @@ -300,8 +334,8 @@ export namespace CalculatePixelUtils { } export async function sketchGpu(p: PixelMap, func?: AsyncTransform) { - let imageInfo:image.ImageInfo = await p.getImageInfo(); - let size = { + let imageInfo: image.ImageInfo = await p.getImageInfo(); + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } @@ -319,7 +353,7 @@ export namespace CalculatePixelUtils { filter.setImageData(bufferData, w, h); filter.getPixelMapBuf(0, 0, w, h).then((buf) => { p.writeBufferToPixels(buf); - if (func!=undefined) { + if (func != undefined) { func.asyncTransform("success", p); } }) diff --git a/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets index 0ffc41d..d7fc36e 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets @@ -14,7 +14,7 @@ */ import resourceManager from '@ohos.resourceManager'; import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; -import type {DataCallBack} from "../interface/DataCallBack" +import {DataCallBack} from "../interface/DataCallBack" export namespace ColorUtils { @@ -24,11 +24,11 @@ export namespace ColorUtils { */ export function parseColor(c: string, callback: DataCallBack) { - var reColor = 'sys.color.' + c; + let reColor = 'sys.color.' + c; ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager).getString($r(reColor) .id, (err, color) => { if (!err) { - var cos = JSON.stringify(color); + let cos = JSON.stringify(color); callback.callback(cos) } else { callback.callback(err.message) diff --git a/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets index ac87e6f..526d098 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets @@ -14,8 +14,8 @@ */ import {LogUtil} from '../../imageknife/utils/LogUtil' export class FileTypeUtil { - private map = new Map(); - private READ_MIN_LENGTH; + private map:Map = new Map(); + private READ_MIN_LENGTH:number = 0; private SUPPORT_FORMATS = [ PhotoFormat.jpg, PhotoFormat.png, @@ -45,11 +45,14 @@ export class FileTypeUtil { let dataView = new DataView(arraybuffer); LogUtil.log('dataView +'+this.getDataViewAt(dataView,0)+this.getDataViewAt(dataView,1)) - - for(var [key,value] of this.map){ + let entries: IterableIterator = this.map.entries(); + for (let i = 0; i < this.map.size; i++) { + let entry:Object[] = entries.next().value; + let key = entry[0] as string + let value = entry[1] as string let keySplit = key.split(',') if(keySplit.length == 2){ - let offset = parseInt(keySplit[0]) + let offset = Number(keySplit[0]) let magicStringLength = keySplit[1].length; let readLength = magicStringLength/2; let start = 0; @@ -58,8 +61,6 @@ export class FileTypeUtil { fileMagic+=this.getDataViewAt(dataView,offset+start) start++; } -// LogUtil.log('magic='+fileMagic+' keySplit[1]='+keySplit[1]+' fileMagic == keySplit[1] ='+(fileMagic == keySplit[1])+ -// ' fileMagic type ='+typeof(fileMagic) + ' keySplit[1]='+typeof(keySplit[1])) if(fileMagic == keySplit[1]){ LogUtil.log('匹配到了 fileType='+value) fileType = value @@ -104,9 +105,14 @@ export class FileTypeUtil { } private printMapContent(){ - for(var [key,value] of this.map){ + + let entries: IterableIterator = this.map.entries(); + for (let i = 0; i < this.map.size; i++) { + let entry:Object[] = entries.next().value; + let key = entry[0] as string + let value = entry[1] as string LogUtil.log('key='+key+'---value='+value) - } + } } private initReadMinLength(){ @@ -114,7 +120,7 @@ export class FileTypeUtil { this.map.forEach((value,key,map)=>{ let keySplit = key.split(','); if(keySplit.length == 2){ - let offset = parseInt(keySplit[0]) + let offset = Number(keySplit[0]) let magicStringLength = keySplit[1].length; let tempMax = offset + magicStringLength/2; if(tempMax > max){ diff --git a/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets b/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets index 60977ba..dc0f811 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets @@ -31,7 +31,7 @@ export class K2DArray { if (row < 1) { return; } - for (var i = 0; i < row; i++) { + for (let i = 0; i < row; i++) { this._2dArray.push(new Array()) } } @@ -40,8 +40,8 @@ export class K2DArray { if (c < 1) { return; } - for (var i = 0; i < this._2dArray.length; i++) { - for (var j = 0; j < c; j++) { + for (let i = 0; i < this._2dArray.length; i++) { + for (let j = 0; j < c; j++) { this._2dArray[i].push(value); } } @@ -57,7 +57,7 @@ export class K2DArray { /** * 获取数组 */ - public getColumnsArray(r: number): Array{ + public getColumnsArray(r: number): Array|null{ if (r < 0 || r >= this.rows) { return null; } diff --git a/imageknife/src/main/ets/components/imageknife/utils/LogUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/LogUtil.ets index 27ff820..cf7e066 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/LogUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/LogUtil.ets @@ -22,32 +22,32 @@ export class LogUtil { public static ALL: number = 7 public static mLogLevel:number = LogUtil.OFF; - public static debug(message: string, ...args: any[]) { + public static debug(message: string, ...args: Object[]) { if (LogUtil.mLogLevel >= LogUtil.DEBUG) { console.debug(message, args) } } - public static info(message: string, ...args: any[]) { + public static info(message: string, ...args: Object[]) { if (LogUtil.mLogLevel >= LogUtil.INFO) { console.info(message, args) } } - public static log(message: string, ...args: any[]) { + public static log(message: string, ...args: Object[]) { if (LogUtil.mLogLevel >= LogUtil.LOG) { console.log(message, args) } } - public static warn(message: string, ...args: any[]) { + public static warn(message: string, ...args: Object[]) { if (LogUtil.mLogLevel >= LogUtil.WARN) { console.warn(message, args) } } // error 不做拦截 - public static error(message: string, ...args: any[]) { + public static error(message: string, ...args: Object[]) { if(LogUtil.mLogLevel >= LogUtil.ERROR) { console.error(message, args) } diff --git a/imageknife/src/main/ets/components/imageknife/utils/MaskUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/MaskUtils.ets index e8beed6..c8a9a78 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/MaskUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/MaskUtils.ets @@ -16,11 +16,12 @@ import {PixelEntry} from "../entry/PixelEntry" import {AsyncTransform} from "../transform/AsyncTransform" import {ColorUtils} from "./ColorUtils" import {CalculatePixelUtils} from "./CalculatePixelUtils" +import {Size} from '../RequestOption' export class MaskUtils { - static async mask(bitmap: any, maskBitmap: any, func?: AsyncTransform) { + static async mask(bitmap: PixelMap, maskBitmap: PixelMap, func?: AsyncTransform) { let imageInfo = await bitmap.getImageInfo(); - let size = { + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } @@ -62,7 +63,7 @@ export class MaskUtils { let imageInfoMask = await maskBitmap.getImageInfo(); - let sizeMask = { + let sizeMask:Size = { width: imageInfoMask.size.width, height: imageInfoMask.size.height } @@ -137,8 +138,8 @@ export class MaskUtils { index++; } await maskBitmap.writeBufferToPixels(bufferNewData); - if (func) { - func("", maskBitmap); + if (func != undefined) { + func?.asyncTransform("", maskBitmap); } } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets index 5c6953e..ea51f37 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets @@ -31,9 +31,9 @@ export class ParseImageUtil implements IParseImage { } let hValue = Math.round(value.size.height * scale); let wValue = Math.round(value.size.width * scale); - let defaultSize = { - 'height': hValue, - 'width': wValue + let defaultSize:image.Size = { + height: hValue, + width: wValue }; let opts:image.DecodingOptions = { diff --git a/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets index 65d5da6..e9e468a 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets @@ -37,7 +37,7 @@ export namespace pixelUtils { let targetWidth:number = size.width; let targetHeight:number = size.height; - var pixEntry: Array = new Array() + let pixEntry: Array = new Array() let inPixels: Array> = CalculatePixelUtils.createInt2DArray(targetHeight, targetWidth); let bufferData = new ArrayBuffer(bitmap.getPixelBytesNumber()); @@ -71,13 +71,13 @@ export namespace pixelUtils { } } - var realPixel_W = pixel > targetWidth ? targetWidth : pixel; - var realPixel_H = pixel > targetHeight ? targetHeight : pixel; + let realPixel_W = pixel > targetWidth ? targetWidth : pixel; + let realPixel_H = pixel > targetHeight ? targetHeight : pixel; //横排的正方形个数 - var x_index = Math.floor(targetWidth / realPixel_W); + let x_index = Math.floor(targetWidth / realPixel_W); //纵排的正方形个数 - var y_index = Math.floor(targetHeight / realPixel_H); + let y_index = Math.floor(targetHeight / realPixel_H); for (let ch = 0; ch < y_index; ch++) { for (let cw = 0; cw < x_index; cw++) { @@ -132,9 +132,9 @@ export namespace pixelUtils { func?.asyncTransform("success", bitmap); } } - export async function pixelGPU(bitmap: any, pixel: number, func?: AsyncTransform) { + export async function pixelGPU(bitmap: PixelMap, pixel: number, func?: AsyncTransform) { - let imageInfo = await bitmap.getImageInfo(); + let imageInfo:image.ImageInfo = await bitmap.getImageInfo(); let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height diff --git a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFFrame.ts b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFFrame.ts index dd753bb..394c313 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFFrame.ts +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFFrame.ts @@ -12,15 +12,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import image from '@ohos.multimedia.image'; +export interface Dims{ + width: number; + height: number; + top: number; + left: number +} export class GIFFrame { // 显示帧 width 宽 height 高 top上边距 left左边距 - dims: { - width: number; - height: number; - top: number; - left: number - } + dims: Dims // 当前帧的像素数据指向的颜色数组 只为了生成patch,非必要 colorTable?: [number, number, number][] @@ -35,7 +37,7 @@ export class GIFFrame { patch?: Uint8ClampedArray // drawPixelMap 如果像素转换为PixelMap后使用PixelMap展示, patch和drawPixelMap 2选1 - drawPixelMap? + drawPixelMap?:image.PixelMap // 当前帧每个像素的颜色表查找索引 只为了生成patch,非必要 pixels?: number[] 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 bf2b01d..68cb0be 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets @@ -13,21 +13,33 @@ * limitations under the License. */ import type { IParseGif } from './IParseGif' -import { GIFFrame } from './GIFFrame' +import { Dims, GIFFrame } from './GIFFrame' import { LoadType } from '../../../../../../../GifWorker' import { parseBufferToFrame } from './parse/GIFParse' import { LogUtil } from '../../utils/LogUtil' import image from '@ohos.multimedia.image' import { ImageKnifeGlobal } from '../../ImageKnifeGlobal' import { BusinessError } from '@ohos.base' -import worker from '@ohos.worker'; +import worker, { ErrorEvent, MessageEvents } from '@ohos.worker'; +export interface senderData{ + type:string, + data:ArrayBuffer; +} + +export interface gifBackData{ + dims:Dims[], + delay:number[], + disposalType:number[], + patch:Uint8ClampedArray[], + transparentIndex:number[] +} export class GIFParseImpl implements IParseGif { parseGifs(imageinfo: ArrayBuffer, callback: (data?:GIFFrame[], err?:BusinessError|string) => void, worker?:worker.ThreadWorker,runMainThread?:boolean) { let resolveWorker = worker; LogUtil.log('parseGifs resolveWorker1 is null =' + (resolveWorker == null)) - if (!resolveWorker) { - resolveWorker = ImageKnifeGlobal.getInstance().getImageKnife().getGifWorker(); + if (!resolveWorker && ImageKnifeGlobal.getInstance().getImageKnife() != undefined) { + resolveWorker = ImageKnifeGlobal.getInstance().getImageKnife()?.getGifWorker(); } LogUtil.log('parseGifs resolveWorker2 is null =' + (resolveWorker == null)) @@ -38,18 +50,22 @@ export class GIFParseImpl implements IParseGif { if (err) { callback(undefined, err) } else { - this.createPixelMapAll(data).then((pixelmaps) => { - if (pixelmaps.length == data.length) { - for (let i = 0;i < data.length; i++) { - let frame = data[i]; - frame['drawPixelMap'] = pixelmaps[i]; - frame['patch'] = null; + if (data != undefined) { + this.createPixelMapAll(data).then((pixelmaps) => { + if (pixelmaps.length == data.length) { + for (let i = 0;i < data.length; i++) { + let frame = data[i]; + frame['drawPixelMap'] = pixelmaps[i]; + frame['patch'] = undefined; + } + callback(data, undefined) } - callback(data, undefined) - } - }).catch(err => { - callback(undefined, err) - }) + }).catch((err: BusinessError) => { + callback(undefined, err) + }) + }else{ + callback(undefined, 'GIF Parse Error callback data is undefined') + } } }) } else { @@ -61,55 +77,58 @@ export class GIFParseImpl implements IParseGif { for (let i = 0;i < frames.length; i++) { let frame = frames[i]; frame['drawPixelMap'] = pixelmaps[i]; - frame['patch'] = null; + frame['patch'] = undefined; } LogUtil.log('parseGifs in main thread! callback is done!') callback(frames, undefined) } - }).catch(err => { + }).catch((err:BusinessError) => { LogUtil.log('parseGifs in main thread! err =' + err) callback(undefined, err) }) } } - private createPixelMapAll(frames): Promise { - let promises = [] - let filterCriteria = (item) => { + private createPixelMapAll(frames:GIFFrame[]): Promise { + let promises:Promise[] = new Array(); + let filterCriteria = (item:GIFFrame) => { if (!item['drawPixelMap']) { return true; } + return false; } - frames.filter(filterCriteria, frames).flatMap((frame) => { - promises.push(image.createPixelMap(frame.patch.buffer, { - 'size': { - 'height': frame.dims.height as number, - 'width': frame.dims.width as number - } - })) + frames.filter(filterCriteria, frames).flatMap((frame:GIFFrame) => { + if(frame.patch != undefined) { + promises.push(image.createPixelMap(frame.patch.buffer, { + 'size': { + 'height': frame.dims.height as number, + 'width': frame.dims.width as number + } + })) + } }) - return Promise.all(promises) + return Promise.all(promises) } - private useWorkerParse(worker: any, buffer: ArrayBuffer, callback: (data?, err?) => void) { + private useWorkerParse(worker:worker.ThreadWorker, buffer: ArrayBuffer, callback: (data?:GIFFrame[], err?:BusinessError|string) => void) { - worker.onerror = function (data) { - callback(undefined, data) + worker.onerror = (err:ErrorEvent)=>{ + callback(undefined, err) } - worker.onmessageerror = function (event) { + worker.onmessageerror = (event: MessageEvents) => { callback(undefined, event) } - worker.onexit = function () { + worker.onexit = ()=> { LogUtil.log('gifWork worker.onexit!') } - worker.onmessage = (e) => { - var data = e.data; - switch (data.type) { + worker.onmessage = (e: MessageEvents) => { + let data:Record = e.data; + switch (data.type as string) { case LoadType.loadBufferByWorker: - let pages = data.data; + let pages:gifBackData = (data.data as gifBackData); if (this.gifDecodeCorrect(pages)) { let images = this.recDecodedData(pages); callback(images, undefined) @@ -122,12 +141,12 @@ export class GIFParseImpl implements IParseGif { } } - var obj = { type: LoadType.loadBufferByWorker, data: buffer } + let obj:senderData = { type: LoadType.loadBufferByWorker, data: buffer } worker.postMessage(obj, [buffer]) } - private gifDecodeCorrect(frames) { + private gifDecodeCorrect(frames:gifBackData) { if ( (frames.patch.length == frames.dims.length) && (frames.patch.length == frames.delay.length) && @@ -141,24 +160,19 @@ export class GIFParseImpl implements IParseGif { } // 子线程数据回传处理 - private recDecodedData(pages): GIFFrame[] { - let images = [] + private recDecodedData(pages:gifBackData): GIFFrame[] { + let images:GIFFrame[] = new Array() for (let i = 0; i < pages.patch.length; i++) { - let frame = {} + let frame = new GIFFrame(); frame['dims'] = pages.dims[i] - pages.dims[i] = null frame['delay'] = pages.delay[i] - pages.delay[i] = null frame['disposalType'] = pages.disposalType[i] - pages.disposalType[i] = null let uint8ClampedArray = new Uint8ClampedArray(pages.patch[i]) frame['patch'] = uint8ClampedArray - pages.patch[i] = null + pages[i] = new Uint8ClampedArray(0) frame['transparentIndex'] = pages.transparentIndex[i] - pages.transparentIndex[i] = null images.push(frame) } - pages = null return images; } } \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/utils/svg/IParseSvg.ets b/imageknife/src/main/ets/components/imageknife/utils/svg/IParseSvg.ets index 116281f..2daae68 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/svg/IParseSvg.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/svg/IParseSvg.ets @@ -12,7 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import {Size} from '../../RequestOption' export interface IParseSvg { // 解析svg - parseSvg(imageinfo: ArrayBuffer,size?:{width:number,height:number}): Promise + parseSvg:(imageinfo: ArrayBuffer,size?:Size)=> Promise } \ No newline at end of file From 68acab45ff91d13672493de7df64951b65bba48d Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Thu, 21 Sep 2023 16:17:14 +0800 Subject: [PATCH 14/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B914=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife=E6=A0=B8=E5=BF=83=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- imageknife/index.ets | 4 +- .../ets/components/imageknife/ImageKnife.ets | 45 +- .../imageknife/ImageKnifeComponent.ets | 432 ++++++++++-------- .../components/imageknife/ImageKnifeData.ets | 18 +- .../imageknife/ImageKnifeDrawFactory.ets | 56 +-- .../imageknife/ImageKnifeOption.ets | 70 +-- .../components/imageknife/RequestOption.ets | 174 ++++--- 7 files changed, 459 insertions(+), 340 deletions(-) diff --git a/imageknife/index.ets b/imageknife/index.ets index 5d0c3ac..bbce11a 100644 --- a/imageknife/index.ets +++ b/imageknife/index.ets @@ -94,10 +94,10 @@ export * from './src/main/ets/components/3rd_party/upng/UPNG' */ export * from './src/main/ets/components/imageknife/ImageKnife' export * from './src/main/ets/components/imageknife/ImageKnifeGlobal' -export * from './src/main/ets/components/imageknife/RequestOption' +export {RequestOption,Size} from './src/main/ets/components/imageknife/RequestOption' export * from './src/main/ets/components/imageknife/ImageKnifeComponent' export * from './src/main/ets/components/imageknife/ImageKnifeDrawFactory' -export * from './src/main/ets/components/imageknife/ImageKnifeOption' +export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions} from './src/main/ets/components/imageknife/ImageKnifeOption' export * from './src/main/ets/components/imageknife/ImageKnifeData' export type {IAllCacheInfoCallback} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' export type {AllCacheInfo} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets index cffa632..6244b91 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets @@ -26,23 +26,24 @@ import {RequestManager} from "../imageknife/requestmanage/RequestManager" import {NONE} from "../cache/diskstrategy/enum/NONE" import {FileTypeUtil} from '../imageknife/utils/FileTypeUtil' import {DownloadClient} from '../imageknife/networkmanage/DownloadClient' -import type {IDataFetch} from '../imageknife/networkmanage/IDataFetch' +import {IDataFetch} from '../imageknife/networkmanage/IDataFetch' import {ParseResClient} from '../imageknife/resourcemanage/ParseResClient' -import type {IResourceFetch} from '../imageknife/resourcemanage/IResourceFetch' +import {IResourceFetch} from '../imageknife/resourcemanage/IResourceFetch' import {ImageKnifeData,ImageKnifeType} from '../imageknife/ImageKnifeData' import {ImageKnifeGlobal} from '../imageknife/ImageKnifeGlobal' import image from "@ohos.multimedia.image" import {CompressBuilder} from "../imageknife/compress/CompressBuilder" import { IDrawLifeCycle } from '../imageknife/interface/IDrawLifeCycle' import {LogUtil} from '../imageknife/utils/LogUtil' +import worker from '@ohos.worker' export class ImageKnife { static readonly SEPARATOR: string = '/' - private memoryCache: LruCache; + private memoryCache: LruCache; private diskMemoryCache: DiskLruCache; private dataFetch: IDataFetch; - private resourceFetch: IResourceFetch; + private resourceFetch: IResourceFetch; private filesPath: string = ""; // data/data/包名/files目录 @@ -56,9 +57,9 @@ export class ImageKnife { private defaultListener: AsyncCallback; // 全局监听器 // gifWorker - private gifWorker; + private gifWorker: worker.ThreadWorker|undefined = undefined; - private defaultLifeCycle: IDrawLifeCycle; + private defaultLifeCycle: IDrawLifeCycle|undefined = undefined; // 开发者可配置全局缓存 private engineKeyImpl: EngineKeyInterface; @@ -66,7 +67,7 @@ export class ImageKnife { private constructor() { // 构造方法传入size 为保存文件个数 - this.memoryCache = new LruCache(100); + this.memoryCache = new LruCache(100); // 创建disk缓存 传入的size 为多少比特 比如20KB 传入20*1024 this.diskMemoryCache = DiskLruCache.create(ImageKnifeGlobal.getInstance().getHapContext()); @@ -89,7 +90,7 @@ export class ImageKnife { this.engineKeyImpl = new EngineKeyFactories(); } - getMemoryCache(): LruCache{ + getMemoryCache(): LruCache{ return this.memoryCache; } @@ -125,7 +126,7 @@ export class ImageKnife { return ImageKnifeGlobal.getInstance().getHapContext(); } - setMemoryCache(lrucache: LruCache) { + setMemoryCache(lrucache: LruCache) { this.memoryCache = lrucache; } @@ -133,7 +134,7 @@ export class ImageKnife { return this.defaultListener; } - setGifWorker(worker){ + setGifWorker(worker:worker.ThreadWorker){ this.gifWorker = worker } getGifWorker(){ @@ -165,10 +166,10 @@ export class ImageKnife { // 替代原来的LruCache public replaceLruCache(size:number){ if(this.memoryCache.map.size() <= 0) { - this.memoryCache = new LruCache(size); + this.memoryCache = new LruCache(size); }else{ - let newLruCache = new LruCache(size); - this.memoryCache.foreachLruCache(function (value, key, map) { + let newLruCache = new LruCache(size); + this.memoryCache.foreachLruCache( (value:ImageKnifeData, key:string, map:Object)=> { newLruCache.put(key, value); }) this.memoryCache = newLruCache; @@ -185,7 +186,7 @@ export class ImageKnife { this.diskMemoryCache = DiskLruCache.create(ImageKnifeGlobal.getInstance().getHapContext(), size); } else { let newDiskLruCache = DiskLruCache.create(ImageKnifeGlobal.getInstance().getHapContext(), size); - this.diskMemoryCache.foreachDiskLruCache(function (value, key, map) { + this.diskMemoryCache.foreachDiskLruCache( (value:string|ArrayBuffer, key:string, map:Object)=> { newDiskLruCache.set(key, value); }) this.diskMemoryCache = newDiskLruCache; @@ -193,7 +194,7 @@ export class ImageKnife { } // 预加载 resource资源一级缓存,string资源实现二级缓存 - preload(request: RequestOption) { + preload(request: RequestOption):void { // 每个request 公共信息补充 request.setFilesPath(this.filesPath); @@ -201,7 +202,7 @@ export class ImageKnife { } // 正常加载 - call(request: RequestOption) { + call(request: RequestOption):void { // 添加全局监听 if(this.defaultListener) { request.addListener(this.defaultListener) @@ -227,10 +228,10 @@ export class ImageKnife { } loadResources(request: RequestOption) { - let factories; - let cacheKey; - let transferKey; - let dataKey; + let factories:EngineKeyInterface; + let cacheKey:string; + let transferKey:string; + let dataKey:string; if(this.engineKeyImpl){ factories = this.engineKeyImpl; }else { @@ -331,7 +332,7 @@ export class ImageKnife { // 加载下一个key的请求 - loadNextPending(request) { + loadNextPending(request:RequestOption) { // 首先寻找被移除key相同的request let index = -1; for (let i = 0; i < this.pendingRequest.length; i++) { @@ -422,7 +423,7 @@ export class ImageKnife { return false; } - parseSource(request: RequestOption) { + parseSource(request: RequestOption):void { if ((typeof (request.loadSrc as image.PixelMap).isEditable) == 'boolean') { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, request.loadSrc as PixelMap) request.loadComplete(imageKnifeData); diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets index 7ee3017..88ec7d6 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets @@ -16,12 +16,12 @@ import { ImageKnifeOption } from '../imageknife/ImageKnifeOption' import { ImageKnifeGlobal } from '../imageknife/ImageKnifeGlobal' import { TransformType } from '../imageknife/transform/TransformType' -import { RequestOption } from '../imageknife/RequestOption' +import { RequestOption, Size } from '../imageknife/RequestOption' import { ImageKnifeData } from '../imageknife/ImageKnifeData' import { GIFFrame } from '../imageknife/utils/gif/GIFFrame' import { IDrawLifeCycle } from '../imageknife/interface/IDrawLifeCycle' import { LogUtil } from '../imageknife/utils/LogUtil' - +import { BusinessError } from '@ohos.base' @Component export struct ImageKnifeComponent { @@ -79,7 +79,8 @@ export struct ImageKnifeComponent { } private canvasHasReady: boolean = false; private firstDrawFlag: boolean = false; - private onReadyNext: () => void = undefined + private onReadyNext?: (data:ImageKnifeData|number|undefined) => void = undefined + private onReadyNextData:ImageKnifeData|number|undefined = undefined build() { Canvas(this.context) @@ -105,11 +106,12 @@ export struct ImageKnifeComponent { this.canvasHasReady = true; if (this.onReadyNext) { LogUtil.log('ImageKnifeComponent onReadyNext is running!') - this.onReadyNext() + this.onReadyNext(this.onReadyNextData) this.onReadyNext = undefined; + this.onReadyNextData = undefined } }) - .onClick((event: ClickEvent) => { + .onClick((event?: ClickEvent) => { // 需要将点击事件回传 if (this.imageKnifeOption.onClick) { this.imageKnifeOption.onClick(event) @@ -153,25 +155,26 @@ export struct ImageKnifeComponent { * 待onReady执行的时候执行 * @param nextFunction 下一个方法 */ - runNextFunction(nextFunction: () => void) { + runNextFunction(nextFunction: (data:ImageKnifeData|number|undefined) => void,data:ImageKnifeData|number|undefined) { if (!this.canvasHasReady) { // canvas未初始化完成 this.onReadyNext = nextFunction; + this.onReadyNextData = data; } else { - nextFunction(); + nextFunction(data); } } configNecessary(request: RequestOption) { request.load(this.imageKnifeOption.loadSrc) - .addListener({ callback: (err, data) => { + .addListener({ callback: (err:BusinessError|string, data:ImageKnifeData) => { LogUtil.log('ImageKnifeComponent request.load callback') - this.runNextFunction(this.displayMainSource.bind(this, data)); + this.runNextFunction(this.displayMainSource,data); return false; } }) - let realSize = { + let realSize:Size = { width: this.currentWidth, height: this.currentHeight } @@ -198,22 +201,22 @@ export struct ImageKnifeComponent { configDisplay(request: RequestOption) { if (this.imageKnifeOption.placeholderSrc) { - request.placeholder(this.imageKnifeOption.placeholderSrc, {asyncSuccess:(data) => { + request.placeholder(this.imageKnifeOption.placeholderSrc, {asyncSuccess:(data:ImageKnifeData) => { LogUtil.log('ImageKnifeComponent request.placeholder callback') - this.runNextFunction(this.displayPlaceholder.bind(this, data)) + this.runNextFunction(this.displayPlaceholder,data) } }) } if (this.imageKnifeOption.thumbSizeMultiplier) { - request.thumbnail(this.imageKnifeOption.thumbSizeMultiplier, {asyncSuccess:(data) => { + request.thumbnail(this.imageKnifeOption.thumbSizeMultiplier, {asyncSuccess:(data:ImageKnifeData) => { LogUtil.log('ImageKnifeComponent request.thumbnail callback') - this.runNextFunction(this.displayThumbSizeMultiplier.bind(this, data)) + this.runNextFunction(this.displayThumbSizeMultiplier,data) }}, this.imageKnifeOption.thumbSizeDelay) } if (this.imageKnifeOption.errorholderSrc) { - request.errorholder(this.imageKnifeOption.errorholderSrc, {asyncSuccess:(data) => { + request.errorholder(this.imageKnifeOption.errorholderSrc, {asyncSuccess:(data:ImageKnifeData) => { LogUtil.log('ImageKnifeComponent request.errorholder callback') - this.runNextFunction(this.displayErrorholder.bind(this, data)) + this.runNextFunction(this.displayErrorholder,data) }}) } @@ -235,15 +238,15 @@ export struct ImageKnifeComponent { request.addProgressListener({asyncSuccess:(percentValue: number) => { // 如果进度条百分比 未展示大小,展示其动画 LogUtil.log('ImageKnifeComponent request.addProgressListener callback') - this.runNextFunction(this.displayProgress.bind(this, percentValue)) + this.runNextFunction(this.displayProgress,percentValue) }}) } if (this.imageKnifeOption.retryholderSrc) { - request.retryholder(this.imageKnifeOption.retryholderSrc,{asyncSuccess: (data) => { + request.retryholder(this.imageKnifeOption.retryholderSrc,{asyncSuccess: (data:ImageKnifeData) => { LogUtil.log('ImageKnifeComponent request.retryholder callback') this.hasDisplayRetryholder = true - this.runNextFunction(this.displayRetryholder.bind(this, data)) + this.runNextFunction(this.displayRetryholder,data) }}) } } @@ -273,108 +276,140 @@ export struct ImageKnifeComponent { this.configCacheStrategy(request); this.configDisplay(request); this.configRenderGpu(request); - ImageKnifeGlobal.getInstance().getImageKnife().call(request); + if(ImageKnifeGlobal.getInstance().getImageKnife()!=undefined) { + ImageKnifeGlobal.getInstance().getImageKnife()?.call(request); + } } - displayPlaceholder(data: ImageKnifeData) { - if (!this.drawLifeCycleHasConsumed(this.imageKnifeOption.drawLifeCycle, 'displayPlaceholder', this.context, data, this.imageKnifeOption, + displayPlaceholder = (data: ImageKnifeData|number|undefined)=> { + if(data == undefined || typeof data == 'number'){ + return + } + if (!this.drawLifeCycleHasConsumed( 'displayPlaceholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayPlaceholder', this.context, data, this.imageKnifeOption, + },this.imageKnifeOption.drawLifeCycle)) { + if (!this.drawLifeCycleHasConsumed( 'displayPlaceholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - this.defaultLifeCycle.displayPlaceholder(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { - this.setGifTimeId(gifTimeId) - }) + },(ImageKnifeGlobal.getInstance().getImageKnife())?.getDefaultLifeCycle())) { + if(this.defaultLifeCycle.displayPlaceholder != undefined) { + this.defaultLifeCycle.displayPlaceholder(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { + this.setGifTimeId(gifTimeId) + }) + } } } } - displayProgress(percent: number) { - if (!this.drawLifeCycleHasConsumed(this.imageKnifeOption.drawLifeCycle, 'displayProgress', this.context, percent, this.imageKnifeOption, + displayProgress = (percent: ImageKnifeData|number|undefined)=> { + if(typeof percent != 'number'){ + return + } + if (!this.drawLifeCycleHasConsumed( 'displayProgress', this.context, percent, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayProgress', this.context, percent, this.imageKnifeOption, + },this.imageKnifeOption.drawLifeCycle)) { + if (!this.drawLifeCycleHasConsumed( 'displayProgress', this.context, percent, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - this.defaultLifeCycle.displayProgress(this.context, percent, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { - this.setGifTimeId(gifTimeId) - }) + },(ImageKnifeGlobal.getInstance().getImageKnife())?.getDefaultLifeCycle())) { + if(this.defaultLifeCycle.displayProgress != undefined) { + this.defaultLifeCycle.displayProgress(this.context, percent, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { + this.setGifTimeId(gifTimeId) + }) + } } } } - displayThumbSizeMultiplier(data: ImageKnifeData) { - if (!this.drawLifeCycleHasConsumed(this.imageKnifeOption.drawLifeCycle, 'displayThumbSizeMultiplier', this.context, data, this.imageKnifeOption, + displayThumbSizeMultiplier = (data: ImageKnifeData|number|undefined)=> { + if(data == undefined || typeof data == 'number'){ + return + } + if (!this.drawLifeCycleHasConsumed( 'displayThumbSizeMultiplier', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayThumbSizeMultiplier', this.context, data, this.imageKnifeOption, + },this.imageKnifeOption.drawLifeCycle)) { + if (!this.drawLifeCycleHasConsumed( 'displayThumbSizeMultiplier', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - this.defaultLifeCycle.displayThumbSizeMultiplier(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { - this.setGifTimeId(gifTimeId) - }) + },(ImageKnifeGlobal.getInstance().getImageKnife())?.getDefaultLifeCycle())) { + if(this.defaultLifeCycle.displayThumbSizeMultiplier != undefined) { + this.defaultLifeCycle.displayThumbSizeMultiplier(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { + this.setGifTimeId(gifTimeId) + }) + } } } } - displayMainSource(data: ImageKnifeData) { - if (!this.drawLifeCycleHasConsumed(this.imageKnifeOption.drawLifeCycle, 'displayMainSource', this.context, data, this.imageKnifeOption, + displayMainSource = (data: ImageKnifeData|number|undefined)=> { + if(data == undefined || typeof data == 'number'){ + return + } + if (!this.drawLifeCycleHasConsumed( 'displayMainSource', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayMainSource', this.context, data, this.imageKnifeOption, + },this.imageKnifeOption.drawLifeCycle)) { + if (!this.drawLifeCycleHasConsumed( 'displayMainSource', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - this.defaultLifeCycle.displayMainSource(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { - this.setGifTimeId(gifTimeId) - }) + },(ImageKnifeGlobal.getInstance().getImageKnife())?.getDefaultLifeCycle())) { + if(this.defaultLifeCycle.displayMainSource != undefined) { + this.defaultLifeCycle.displayMainSource(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { + this.setGifTimeId(gifTimeId) + }) + } } } } - displayRetryholder(data: ImageKnifeData) { - if (!this.drawLifeCycleHasConsumed(this.imageKnifeOption.drawLifeCycle, 'displayRetryholder', this.context, data, this.imageKnifeOption, + displayRetryholder = (data: ImageKnifeData|number)=> { + if(data == undefined || typeof data == 'number'){ + return + } + if (!this.drawLifeCycleHasConsumed( 'displayRetryholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayRetryholder', this.context, data, this.imageKnifeOption, + },this.imageKnifeOption.drawLifeCycle)) { + if (!this.drawLifeCycleHasConsumed( 'displayRetryholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - this.defaultLifeCycle.displayRetryholder(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { - this.setGifTimeId(gifTimeId) - }) + },(ImageKnifeGlobal.getInstance().getImageKnife())?.getDefaultLifeCycle())) { + if( this.defaultLifeCycle.displayRetryholder != undefined) { + this.defaultLifeCycle.displayRetryholder(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { + this.setGifTimeId(gifTimeId) + }) + } } } } - displayErrorholder(data: ImageKnifeData) { - if (!this.drawLifeCycleHasConsumed(this.imageKnifeOption.drawLifeCycle, 'displayErrorholder', this.context, data, this.imageKnifeOption, + displayErrorholder = (data: ImageKnifeData|number)=> { + if(data == undefined || typeof data == 'number'){ + return + } + if (!this.drawLifeCycleHasConsumed( 'displayErrorholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - if (!this.drawLifeCycleHasConsumed((ImageKnifeGlobal.getInstance().getImageKnife()).getDefaultLifeCycle(), 'displayErrorholder', this.context, data, this.imageKnifeOption, + },this.imageKnifeOption.drawLifeCycle)) { + if (!this.drawLifeCycleHasConsumed( 'displayErrorholder', this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { this.setGifTimeId(gifTimeId) - })) { - this.defaultLifeCycle.displayErrorholder(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { - this.setGifTimeId(gifTimeId) - }) + },(ImageKnifeGlobal.getInstance().getImageKnife())?.getDefaultLifeCycle())) { + if(this.defaultLifeCycle.displayErrorholder != undefined) { + this.defaultLifeCycle.displayErrorholder(this.context, data, this.imageKnifeOption, this.currentWidth, this.currentHeight, (gifTimeId) => { + this.setGifTimeId(gifTimeId) + }) + } } } @@ -383,13 +418,13 @@ export struct ImageKnifeComponent { drawPlaceholder(context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) { LogUtil.log('ImageKnifeComponent default drawPlaceholder start!') - // @ts-ignore - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { LogUtil.log('ImageKnifeComponent imageinfo widht =' + imageInfo.size.width + ' height=' + imageInfo.size.height) let scaleType = (typeof imageKnifeOption.placeholderScaleType == 'number') ? imageKnifeOption.placeholderScaleType : ScaleType.FIT_CENTER context.save(); context.clearRect(0, 0, compWidth, compHeight) - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) context.restore(); LogUtil.log('ImageKnifeComponent default drawPlaceholder end!') }) @@ -438,13 +473,13 @@ export struct ImageKnifeComponent { drawThumbSizeMultiplier(context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) { LogUtil.log('ImageKnifeComponent default drawThumbSizeMultiplier start!') - // @ts-ignore - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { LogUtil.log('ImageKnifeComponent imageinfo widht =' + imageInfo.size.width + ' height=' + imageInfo.size.height) let scaleType = (typeof imageKnifeOption.thumbSizeMultiplierScaleType == 'number') ? imageKnifeOption.thumbSizeMultiplierScaleType : ScaleType.FIT_CENTER context.save(); context.clearRect(0, 0, compWidth, compHeight) - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) context.restore(); LogUtil.log('ImageKnifeComponent default drawThumbSizeMultiplier end!') }) @@ -453,13 +488,13 @@ export struct ImageKnifeComponent { drawMainSource(context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) { LogUtil.log('ImageKnifeComponent default drawMainSource start!') if (data.isPixelMap()) { - // @ts-ignore - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { let scaleType = (typeof imageKnifeOption.mainScaleType == 'number') ? imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER LogUtil.log('ImageKnifeComponent imageinfo width =' + imageInfo.size.width + ' height=' + imageInfo.size.height + 'scaleType=' + scaleType) context.save(); context.clearRect(0, 0, compWidth, compHeight) - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) context.restore(); LogUtil.log('ImageKnifeComponent default drawMainSource end!') }) @@ -470,13 +505,13 @@ export struct ImageKnifeComponent { drawRetryholder(context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) { LogUtil.log('ImageKnifeComponent default drawRetryholder start!') - // @ts-ignore - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { LogUtil.log('ImageKnifeComponent imageinfo width =' + imageInfo.size.width + ' height=' + imageInfo.size.height) let scaleType = (typeof imageKnifeOption.retryholderScaleType == 'number') ? imageKnifeOption.retryholderScaleType : ScaleType.FIT_CENTER context.save(); context.clearRect(0, 0, compWidth, compHeight) - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) context.restore(); LogUtil.log('ImageKnifeComponent default drawRetryholder end!') }) @@ -484,56 +519,56 @@ export struct ImageKnifeComponent { drawErrorholder(context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) { LogUtil.log('ImageKnifeComponent default drawErrorholder start!') - // @ts-ignore - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { LogUtil.log('ImageKnifeComponent imageinfo widht =' + imageInfo.size.width + ' height=' + imageInfo.size.height) let scaleType = (typeof imageKnifeOption.errorholderSrcScaleType == 'number') ? imageKnifeOption.errorholderSrcScaleType : ScaleType.FIT_CENTER context.save(); context.clearRect(0, 0, compWidth, compHeight) - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0) context.restore(); LogUtil.log('ImageKnifeComponent default drawErrorholder end!') }) } requestAddTransform(request: RequestOption) { - if (TransformType.BlurTransformation == this.imageKnifeOption.transform.transformType) { - request.blur(this.imageKnifeOption.transform.blur) - } else if (TransformType.BrightnessFilterTransformation == this.imageKnifeOption.transform.transformType) { - request.brightnessFilter(this.imageKnifeOption.transform.brightnessFilter) - } else if (TransformType.ContrastFilterTransformation == this.imageKnifeOption.transform.transformType) { - request.contrastFilter(this.imageKnifeOption.transform.contrastFilter) - } else if (TransformType.CropCircleTransformation == this.imageKnifeOption.transform.transformType) { + if (TransformType.BlurTransformation == this.imageKnifeOption.transform?.transformType) { + request.blur(this.imageKnifeOption.transform?.blur) + } else if (TransformType.BrightnessFilterTransformation == this.imageKnifeOption.transform?.transformType) { + request.brightnessFilter(this.imageKnifeOption.transform?.brightnessFilter) + } else if (TransformType.ContrastFilterTransformation == this.imageKnifeOption.transform?.transformType) { + request.contrastFilter(this.imageKnifeOption.transform?.contrastFilter) + } else if (TransformType.CropCircleTransformation == this.imageKnifeOption.transform?.transformType) { request.cropCircle() - } else if (TransformType.CropCircleWithBorderTransformation == this.imageKnifeOption.transform.transformType) { - request.cropCircleWithBorder(this.imageKnifeOption.transform.cropCircleWithBorder.border, this.imageKnifeOption.transform.cropCircleWithBorder.obj) - } else if (TransformType.CropSquareTransformation == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.CropCircleWithBorderTransformation == this.imageKnifeOption.transform?.transformType) { + request.cropCircleWithBorder(this.imageKnifeOption.transform?.cropCircleWithBorder?.border, this.imageKnifeOption.transform?.cropCircleWithBorder?.obj) + } else if (TransformType.CropSquareTransformation == this.imageKnifeOption.transform?.transformType) { request.cropSquare() - } else if (TransformType.CropTransformation == this.imageKnifeOption.transform.transformType) { - request.crop(this.imageKnifeOption.transform.crop.width, this.imageKnifeOption.transform.crop.height, this.imageKnifeOption.transform.crop.cropType) - } else if (TransformType.GrayscaleTransformation == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.CropTransformation == this.imageKnifeOption.transform?.transformType) { + request.crop(this.imageKnifeOption.transform?.crop?.width, this.imageKnifeOption.transform?.crop?.height, this.imageKnifeOption.transform?.crop?.cropType) + } else if (TransformType.GrayscaleTransformation == this.imageKnifeOption.transform?.transformType) { request.grayscale() - } else if (TransformType.InvertFilterTransformation == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.InvertFilterTransformation == this.imageKnifeOption.transform?.transformType) { request.invertFilter() - } else if (TransformType.MaskTransformation == this.imageKnifeOption.transform.transformType) { - request.mask(this.imageKnifeOption.transform.mask) - } else if (TransformType.PixelationFilterTransformation == this.imageKnifeOption.transform.transformType) { - request.pixelationFilter(this.imageKnifeOption.transform.pixelationFilter) - } else if (TransformType.RotateImageTransformation == this.imageKnifeOption.transform.transformType) { - request.rotateImage(this.imageKnifeOption.transform.rotateImage) - } else if (TransformType.RoundedCornersTransformation == this.imageKnifeOption.transform.transformType) { - request.roundedCorners(this.imageKnifeOption.transform.roundedCorners) - } else if (TransformType.SepiaFilterTransformation == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.MaskTransformation == this.imageKnifeOption.transform?.transformType) { + request.mask(this.imageKnifeOption.transform?.mask) + } else if (TransformType.PixelationFilterTransformation == this.imageKnifeOption.transform?.transformType) { + request.pixelationFilter(this.imageKnifeOption.transform?.pixelationFilter) + } else if (TransformType.RotateImageTransformation == this.imageKnifeOption.transform?.transformType) { + request.rotateImage(this.imageKnifeOption.transform?.rotateImage) + } else if (TransformType.RoundedCornersTransformation == this.imageKnifeOption.transform?.transformType) { + request.roundedCorners(this.imageKnifeOption.transform?.roundedCorners) + } else if (TransformType.SepiaFilterTransformation == this.imageKnifeOption.transform?.transformType) { request.sepiaFilter() - } else if (TransformType.SketchFilterTransformation == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.SketchFilterTransformation == this.imageKnifeOption.transform?.transformType) { request.sketchFilter() - } else if (TransformType.SwirlFilterTransformation == this.imageKnifeOption.transform.transformType) { - request.swirlFilter(this.imageKnifeOption.transform.swirlFilter) - } else if (TransformType.CenterCrop == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.SwirlFilterTransformation == this.imageKnifeOption.transform?.transformType) { + request.swirlFilter(this.imageKnifeOption.transform?.swirlFilter) + } else if (TransformType.CenterCrop == this.imageKnifeOption.transform?.transformType) { request.centerCrop() - } else if (TransformType.CenterInside == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.CenterInside == this.imageKnifeOption.transform?.transformType) { request.centerInside() - } else if (TransformType.FitCenter == this.imageKnifeOption.transform.transformType) { + } else if (TransformType.FitCenter == this.imageKnifeOption.transform?.transformType) { request.fitCenter() } } @@ -562,17 +597,17 @@ export struct ImageKnifeComponent { this.gifTimerId = timeId; } - private drawLifeCycleHasConsumed(drawLifeCycle: IDrawLifeCycle, methodName: string, - context: CanvasRenderingContext2D, data: K, imageKnifeOption: T, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void - ) { - if (drawLifeCycle && drawLifeCycle[methodName]) { - return drawLifeCycle[methodName](context, data, imageKnifeOption, compWidth, compHeight, setGifTimeId) + private drawLifeCycleHasConsumed( methodName: string, + context: CanvasRenderingContext2D, data: K, imageKnifeOption: T, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void,drawLifeCycle?: IDrawLifeCycle + ):boolean { + if (drawLifeCycle && (drawLifeCycle as Record)[methodName]) { + return (drawLifeCycle as Record)[methodName](context, data, imageKnifeOption, compWidth, compHeight, setGifTimeId) } return false; } private drawGIFFrame(context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) { - let frames = data.drawGIFFrame.imageGIFFrames as GIFFrame[] + let frames = data.drawGIFFrame?.imageGIFFrames as GIFFrame[] LogUtil.log('ImageKnifeComponent gifFrameLength =' + frames.length); if (imageKnifeOption.gif && (typeof (imageKnifeOption.gif.seekTo) == 'number') && imageKnifeOption.gif.seekTo >= 0) { this.autoPlay = false; @@ -581,7 +616,14 @@ export struct ImageKnifeComponent { } else { this.autoPlay = true context.clearRect(0, 0, compWidth, compHeight) - this.renderFrames.bind(this, frames, 0, context, compWidth, compHeight)() + + this.renderFrames_frames = frames, + this.renderFrames_index = 0, + this.renderFrames_context = context, + this.renderFrames_compWidth = compWidth, + this.renderFrames_compHeight = compHeight + + this.renderFrames() } } @@ -596,22 +638,30 @@ export struct ImageKnifeComponent { * 绘制直接到第几帧方法,由于gif非第一帧数据可能是不全的,这里采用逐帧渲染的方式来绘制保证图像的完整性 */ private drawSeekToFrame(frames: GIFFrame[], context: CanvasRenderingContext2D, compWidth: number, compHeight: number) { - for (let i = 0; i < this.imageKnifeOption.gif.seekTo; i++) { - this.drawFrame(frames, i, context, compWidth, compHeight); + if(this.imageKnifeOption.gif != undefined && this.imageKnifeOption.gif.seekTo != undefined) { + for (let i = 0; i < this.imageKnifeOption.gif.seekTo; i++) { + this.drawFrame(frames, i, context, compWidth, compHeight); + } } } - private renderFrames(frames: GIFFrame[], index: number, context: CanvasRenderingContext2D, compWidth: number, compHeight: number) { - LogUtil.log('ImageKnifeComponent renderFrames frames length =' + frames.length) + renderFrames_frames: GIFFrame[] | undefined = undefined + renderFrames_index: number = 0; + renderFrames_context: CanvasRenderingContext2D | undefined = undefined; + renderFrames_compWidth: number = 0; + renderFrames_compHeight: number = 0 + + renderFrames = ()=> { + LogUtil.log('ImageKnifeComponent renderFrames frames length =' + this.renderFrames_frames.length) let start = new Date().getTime(); - if (index === 0) { + if (this.renderFrames_index === 0) { // 如果是第一帧,我们只从开始渲染前记录时间 this.startGifLoopTime = start; } // draw Frame - this.drawFrame(frames, index, context, compWidth, compHeight); + this.drawFrame(this.renderFrames_frames, this.renderFrames_index, this.renderFrames_context, this.renderFrames_compWidth, this.renderFrames_compHeight); //如果gif动图只有一帧的情况下,不进行后面代码的逐帧绘制循环 - if (frames.length <= 1) { + if (this.renderFrames_frames.length <= 1) { return } @@ -622,9 +672,9 @@ export struct ImageKnifeComponent { if (this.autoPlay) { // 理论上该帧在屏幕上保留的时间 - let stayTime = frames[index].delay; + let stayTime = this.renderFrames_frames[this.renderFrames_index].delay; if (this.imageKnifeOption.gif && this.imageKnifeOption.gif.speedFactory) { - stayTime = frames[index].delay / (this.imageKnifeOption.gif.speedFactory * 1.0); + stayTime = this.renderFrames_frames[this.renderFrames_index].delay / (this.imageKnifeOption.gif.speedFactory * 1.0); } // 减去程序执行消耗,剩余的准确延迟时间 let delayTime = Math.max(0, Math.floor(stayTime - diff)); @@ -636,17 +686,22 @@ export struct ImageKnifeComponent { // 整个gif累计的时长; this.gifLoopDuration += loopStayTime; // 返回gif一次循环结束回调,并且把当前循环的时间给出 - if (index === (frames.length - 1) && this.imageKnifeOption.gif && this.imageKnifeOption.gif.loopFinish) { + if (this.renderFrames_index === (this.renderFrames_frames.length - 1) && this.imageKnifeOption.gif && this.imageKnifeOption.gif.loopFinish) { this.imageKnifeOption.gif.loopFinish(this.gifLoopDuration) this.gifLoopDuration = 0; } // update the frame index - index++ - if (index >= frames.length) { - index = 0; + this.renderFrames_index++ + if (this.renderFrames_index >= this.renderFrames_frames.length) { + this.renderFrames_index = 0; } - // @ts-ignore - this.gifTimerId = setTimeout(this.renderFrames.bind(this, frames, index, context, compWidth, compHeight), delayTime) + + // this.renderFrames_frames, + // this.renderFrames_index, + // this.renderFrames_context, + // this.renderFrames_compWidth, + // this.renderFrames_compHeight + this.gifTimerId = setTimeout(this.renderFrames, delayTime) } } @@ -678,7 +733,8 @@ export struct ImageKnifeComponent { disposal = preFrame.disposalType if (disposal === FrameDisposalType.DISPOSE_RestoreBackground) { - const {left, top } = preFrame.dims; + let left:number = preFrame.dims.left; + let top:number = preFrame.dims.top context.clearRect(left, top, compWidth, compHeight); } } else { @@ -733,7 +789,7 @@ export enum ScaleType { export class ScaleTypeHelper { - static drawImageWithScaleType(context: CanvasRenderingContext2D, scaleType: ScaleType, source: PixelMap | ImageBitmap, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX: number, imageOffsetY: number) { + static drawImageWithScaleType(context: CanvasRenderingContext2D, scaleType: ScaleType, source: PixelMap | undefined, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX: number, imageOffsetY: number) { let scaleW = compWidth / imageWidth let scaleH = compHeight / imageHeight let minScale = scaleW > scaleH ? scaleH : scaleW @@ -771,63 +827,73 @@ export class ScaleTypeHelper { } - static drawFitStart(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, minScale: number, imageWidth: number, imageHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + static drawFitStart(context: CanvasRenderingContext2D, source: PixelMap | undefined, minScale: number, imageWidth: number, imageHeight: number, imageOffsetX?: number, imageOffsetY?: number) { context.setTransform(minScale, 0, 0, minScale, 0, 0) - let dx = 0 - let dy = 0 - let dw = imageWidth; - let dh = imageHeight; - context.drawImage(source, dx + imageOffsetX, dy + imageOffsetY) + let dx:number = 0 + let dy:number = 0 + let dw:number = imageWidth; + let dh:number = imageHeight; + if(source!= undefined) { + context.drawImage(source, dx + (imageOffsetX != undefined ? imageOffsetX : 0), dy + (imageOffsetY != undefined ? imageOffsetY : 0)) + } } - static drawFitEnd(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, minScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + static drawFitEnd(context: CanvasRenderingContext2D, source: PixelMap | undefined, minScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { context.setTransform(minScale, 0, 0, minScale, 0, 0) - let dx = (compWidth - imageWidth * minScale) / (minScale * 1.0); - let dy = (compHeight - imageHeight * minScale) / (minScale * 1.0); - let dw = imageWidth; - let dh = imageHeight; - - context.drawImage(source, dx + imageOffsetX, dy + imageOffsetY) + let dx:number = (compWidth - imageWidth * minScale) / (minScale * 1.0); + let dy:number = (compHeight - imageHeight * minScale) / (minScale * 1.0); + let dw:number = imageWidth; + let dh:number = imageHeight; + if(source!= undefined) { + context.drawImage(source, dx + (imageOffsetX != undefined ? imageOffsetX : 0), dy + (imageOffsetY != undefined ? imageOffsetY : 0)) + } } - static drawFitCenter(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, minScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + static drawFitCenter(context: CanvasRenderingContext2D, source: PixelMap | undefined, minScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { context.setTransform(minScale, 0, 0, minScale, 0, 0) - let dx = (compWidth - imageWidth * minScale) / (minScale * 2.0); - let dy = (compHeight - imageHeight * minScale) / (minScale * 2.0); - let dw = imageWidth; - let dh = imageHeight; - - context.drawImage(source, dx + imageOffsetX, dy + imageOffsetY) + let dx:number = (compWidth - imageWidth * minScale) / (minScale * 2.0); + let dy:number = (compHeight - imageHeight * minScale) / (minScale * 2.0); + let dw:number = imageWidth; + let dh:number = imageHeight; + if(source!= undefined) { + context.drawImage(source, dx + (imageOffsetX != undefined ? imageOffsetX : 0), dy + (imageOffsetY != undefined ? imageOffsetY : 0)) + } } - static drawCenter(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { - let dx = (compWidth - imageWidth) / 2.0; - let dy = (compHeight - imageHeight) / 2.0; - let dw = imageWidth; - let dh = imageHeight; - context.drawImage(source, dx + imageOffsetX, dy + imageOffsetY) + static drawCenter(context: CanvasRenderingContext2D, source: PixelMap | undefined, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + let dx:number = (compWidth - imageWidth) / 2.0; + let dy:number = (compHeight - imageHeight) / 2.0; + let dw:number = imageWidth; + let dh:number = imageHeight; + if(source!= undefined) { + context.drawImage(source, dx + (imageOffsetX != undefined ? imageOffsetX : 0), dy + (imageOffsetY != undefined ? imageOffsetY : 0)) + } } - static drawCenterCrop(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, maxScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + static drawCenterCrop(context: CanvasRenderingContext2D, source: PixelMap | undefined, maxScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { context.setTransform(maxScale, 0, 0, maxScale, 0, 0) - let dx = (compWidth - imageWidth * maxScale) / (maxScale * 2.0); - let dy = (compHeight - imageHeight * maxScale) / (maxScale * 2.0); - let dw = imageWidth; - let dh = imageHeight; - context.drawImage(source, dx + imageOffsetX, dy + imageOffsetY) + let dx:number = (compWidth - imageWidth * maxScale) / (maxScale * 2.0); + let dy:number = (compHeight - imageHeight * maxScale) / (maxScale * 2.0); + let dw:number = imageWidth; + let dh:number = imageHeight; + if(source!= undefined) { + context.drawImage(source, dx + (imageOffsetX != undefined ? imageOffsetX : 0), dy + (imageOffsetY != undefined ? imageOffsetY : 0)) + } } - static drawFitXY(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, scaleW: number, scaleH: number, imageWidth: number, imageHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + static drawFitXY(context: CanvasRenderingContext2D, source: PixelMap | undefined, scaleW: number, scaleH: number, imageWidth: number, imageHeight: number, imageOffsetX?: number, imageOffsetY?: number) { context.setTransform(scaleW, 0, 0, scaleH, 0, 0) - let dx = 0; - let dy = 0; - let dw = imageWidth; - let dh = imageHeight; - context.drawImage(source, dx + imageOffsetX, dy + imageOffsetY) + let dx:number = 0; + let dy:number = 0; + let dw:number = imageWidth; + let dh:number = imageHeight; + if(source!= undefined) { + context.drawImage(source, dx + (imageOffsetX != undefined ? imageOffsetX : 0), dy + (imageOffsetY != undefined ? imageOffsetY : 0)) + } } - static drawCenterInside(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, minScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + static drawCenterInside(context: CanvasRenderingContext2D, source: PixelMap | undefined, minScale: number, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX?: number, imageOffsetY?: number) { if (minScale < 1) { ScaleTypeHelper.drawFitCenter(context, source, minScale, imageWidth, imageHeight, compWidth, compHeight, imageOffsetX, imageOffsetY) } else { @@ -835,13 +901,15 @@ export class ScaleTypeHelper { } } - static drawNone(context: CanvasRenderingContext2D, source: PixelMap | ImageBitmap, imageWidth: number, imageHeight: number, imageOffsetX?: number, imageOffsetY?: number) { - let dx = 0; - let dy = 0; - let dw = imageWidth; - let dh = imageHeight; - context.drawImage(source, dx + imageOffsetX, dy + imageOffsetY) - } + static drawNone(context: CanvasRenderingContext2D, source: PixelMap | undefined, imageWidth: number, imageHeight: number, imageOffsetX?: number, imageOffsetY?: number) { + let dx:number = 0; + let dy:number = 0; + let dw:number = imageWidth; + let dh:number = imageHeight; + if(source!= undefined) { + context.drawImage(source, dx + (imageOffsetX != undefined ? imageOffsetX : 0), dy + (imageOffsetY != undefined ? imageOffsetY : 0)) + } + } } diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets index 7a3ff5b..d291b67 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeData.ets @@ -22,19 +22,19 @@ export enum ImageKnifeType { } export class DrawPixelMap { - imagePixelMap: PixelMap + imagePixelMap: PixelMap | undefined = undefined } export class DrawString { - imageString: string + imageString: string | undefined = undefined } export class DrawResource { - imageResource: Resource + imageResource: Resource | undefined = undefined } export class DrawGIFFrame { - imageGIFFrames: GIFFrame[] + imageGIFFrames: GIFFrame[] | undefined = undefined } export class ImageKnifeData { @@ -47,11 +47,11 @@ export class ImageKnifeData { waitSaveDisk = false; - imageKnifeType: ImageKnifeType; - drawPixelMap: DrawPixelMap; - drawGIFFrame: DrawGIFFrame; - drawResource: DrawResource; - drawString: DrawString; + imageKnifeType: ImageKnifeType | undefined = undefined; + drawPixelMap: DrawPixelMap | undefined = undefined; + drawGIFFrame: DrawGIFFrame | undefined = undefined; + drawResource: DrawResource | undefined = undefined; + drawString: DrawString | undefined = undefined; static createImagePixelMap(type: ImageKnifeType, value: PixelMap) { let data = new ImageKnifeData(); diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets index 3b6cf52..efe31c0 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets @@ -26,10 +26,10 @@ export class ImageKnifeDrawFactory{ * @param colorString 例如 "#FF00FF" */ public static createOvalLifeCycle(borderWidth:number, colorString:string):IDrawLifeCycle{ - let viewLifeCycle = { + let viewLifeCycle:IDrawLifeCycle = { // 展示占位图 displayPlaceholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示加载进度 @@ -38,14 +38,14 @@ export class ImageKnifeDrawFactory{ }, // 展示缩略图 displayThumbSizeMultiplier: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示主图 displayMainSource: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { if (data.isPixelMap()) { - // @ts-ignore + data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { let scaleType = (typeof imageKnifeOption.mainScaleType == 'number') ? imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER @@ -60,7 +60,7 @@ export class ImageKnifeDrawFactory{ context.save(); context.globalCompositeOperation = 'destination-in' context.beginPath(); - this.setOval(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth) + ImageKnifeDrawFactory.setOval(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth) context.closePath(); context.fill() context.restore(); @@ -72,7 +72,7 @@ export class ImageKnifeDrawFactory{ context.lineWidth = borderWidth; context.globalCompositeOperation = 'source-over' context.beginPath(); - this.setOval(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0, borderWidth) + ImageKnifeDrawFactory.setOval(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0, borderWidth) context.closePath(); context.stroke() context.restore(); @@ -189,10 +189,10 @@ export class ImageKnifeDrawFactory{ * @param connerRadius 圆角半径 */ public static createRoundLifeCycle(borderWidth:number, colorString:string, connerRadius:number){ - let viewLifeCycle = { + let viewLifeCycle:IDrawLifeCycle = { // 展示占位图 displayPlaceholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示加载进度 @@ -201,14 +201,14 @@ export class ImageKnifeDrawFactory{ }, // 展示缩略图 displayThumbSizeMultiplier: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示主图 displayMainSource: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { if (data.isPixelMap()) { - // @ts-ignore + data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { let scaleType = (typeof imageKnifeOption.mainScaleType == 'number') ? imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER @@ -223,7 +223,7 @@ export class ImageKnifeDrawFactory{ // 通过 destination-in 裁剪出圆角 context.save(); context.globalCompositeOperation = 'destination-in' - this.setRect(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) + ImageKnifeDrawFactory.setRect(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) context.fill() context.restore(); if(borderWidth > 0){ @@ -232,7 +232,7 @@ export class ImageKnifeDrawFactory{ context.strokeStyle = colorString context.lineWidth = borderWidth context.globalCompositeOperation = 'source-over' - this.setRect(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) + ImageKnifeDrawFactory.setRect(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) context.stroke() context.restore(); } @@ -284,21 +284,21 @@ export class ImageKnifeDrawFactory{ y1 = borderWidth/2 w1 = imageWidth * minScale - borderWidth; h1 = imageHeight * minScale - borderWidth; - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) break case ScaleType.FIT_END: x1 = compWidth - imageWidth * minScale + borderWidth / 2 y1 = compHeight - imageHeight * minScale + borderWidth / 2 w1 = imageWidth * minScale - borderWidth; h1 = imageHeight * minScale - borderWidth; - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) break case ScaleType.FIT_CENTER: x1 = (compWidth - imageWidth * minScale) / 2 + borderWidth / 2 y1 = (compHeight - imageHeight * minScale) / 2 + borderWidth / 2 w1 = imageWidth * minScale - borderWidth h1 = imageHeight * minScale - borderWidth - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) break case ScaleType.CENTER: x1 = Math.max(0,(compWidth - Math.min(compWidth, imageWidth)))/2 + borderWidth/2 @@ -307,7 +307,7 @@ export class ImageKnifeDrawFactory{ w1 = Math.min(compWidth, imageWidth) - borderWidth; h1 = Math.min(compHeight, imageHeight) - borderWidth; - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) break case ScaleType.CENTER_CROP: x1 = borderWidth/2 @@ -315,7 +315,7 @@ export class ImageKnifeDrawFactory{ w1 = compWidth - borderWidth; h1 = compHeight - borderWidth; - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) break case ScaleType.FIT_XY: x1 = borderWidth/2 @@ -323,7 +323,7 @@ export class ImageKnifeDrawFactory{ w1 = compWidth - borderWidth; h1 = compHeight - borderWidth; - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) break case ScaleType.CENTER_INSIDE: if(minScale < 1){ // FIT_CENTER @@ -331,7 +331,7 @@ export class ImageKnifeDrawFactory{ y1 = (compHeight - imageHeight * minScale) / 2 + borderWidth / 2 w1 = imageWidth * minScale - borderWidth h1 = imageHeight * minScale - borderWidth - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) }else{ // CENTER x1 = Math.max(0,(compWidth - Math.min(compWidth, imageWidth)))/2 + borderWidth/2 y1 = Math.max(0,(compHeight - Math.min(compHeight, imageHeight)))/2 + borderWidth/2 @@ -339,7 +339,7 @@ export class ImageKnifeDrawFactory{ w1 = Math.min(compWidth, imageWidth) - borderWidth; h1 = Math.min(compHeight, imageHeight) - borderWidth; - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) } break; @@ -351,7 +351,7 @@ export class ImageKnifeDrawFactory{ w1 = Math.min(compWidth, imageWidth) - borderWidth; h1 = Math.min(compHeight, imageHeight) - borderWidth; - this.roundRect(context, x1, y1, w1, h1, cornerRadius) + ImageKnifeDrawFactory.roundRect(context, x1, y1, w1, h1, cornerRadius) break; } } @@ -390,36 +390,36 @@ export class ImageKnifeDrawFactory{ let viewLifeCycle: IDrawLifeCycle = { // 展示占位图 displayPlaceholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示加载进度 displayProgress: (context: CanvasRenderingContext2D, progress: number, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore - this.drawDefaultProgress(context, progress, imageKnifeOption, compWidth, compHeight,fontColor,fontSizeRate,setGifTimeId) + + ImageKnifeDrawFactory.drawDefaultProgress(context, progress, imageKnifeOption, compWidth, compHeight,fontColor,fontSizeRate,setGifTimeId) return true; }, // 展示缩略图 displayThumbSizeMultiplier: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示主图 displayMainSource: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示重试图层 displayRetryholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示失败占位图 displayErrorholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; } } diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeOption.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeOption.ets index 3c39d3d..0595b39 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeOption.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeOption.ets @@ -22,12 +22,44 @@ import { CropType } from '../imageknife/transform/CropTransformation' import { AllCacheInfo, IAllCacheInfoCallback } from '../imageknife/interface/IAllCacheInfoCallback' import { IDrawLifeCycle } from '../imageknife/interface/IDrawLifeCycle' import { ScaleType } from '../imageknife/ImageKnifeComponent' +import { rgbColor } from './transform/CropCircleWithBorderTransformation' +import { RoundCorner } from './transform/RoundedCornersTransformation' + +export interface CropCircleWithBorder{ + border: number, + obj: rgbColor +} + +export interface Crop{ + width: number, + height: number, + cropType: CropType +} + +export interface GifOptions{ + loopFinish?: (loopTime?:number) => void + speedFactory?: number + seekTo?: number +} +export interface TransformOptions{ + transformType: number, + blur?: number, + roundedCorners?: RoundCorner + cropCircleWithBorder?: CropCircleWithBorder + crop?:Crop + brightnessFilter?: number, + contrastFilter?: number, + pixelationFilter?: number, + swirlFilter?: number, + mask?: Resource, + rotateImage?: number +} @Observed export class ImageKnifeOption { // 主图资源 - loadSrc: string | PixelMap | Resource; + loadSrc: string | PixelMap | Resource = ''; mainScaleType?: ScaleType = ScaleType.FIT_CENTER enableGpu?:boolean = true; @@ -77,43 +109,11 @@ export class ImageKnifeOption { // 设置点击事件回调 onClick?:(event?: ClickEvent) => void - gif?: { - loopFinish?: (loopTime?) => void - speedFactory?: number - seekTo?: number - } + gif?: GifOptions = undefined; // 变换相关 不推荐使用该接口 建议直接使用transformation transformations这2个接口实现 - transform?: { - transformType: number, - blur?: number, - roundedCorners?: { - top_left: number, - top_right: number, - bottom_left: number, - bottom_right: number - } - cropCircleWithBorder?: { - border: number, - obj: { - r_color: number, - g_color: number, - b_color: number - } - } - crop?: { - width: number, - height: number, - cropType: CropType - } - brightnessFilter?: number, - contrastFilter?: number, - pixelationFilter?: number, - swirlFilter?: number, - mask?: Resource, - rotateImage?: number - } + transform?:TransformOptions = undefined transformation?: BaseTransform; transformations?: Array>; diff --git a/imageknife/src/main/ets/components/imageknife/RequestOption.ets b/imageknife/src/main/ets/components/imageknife/RequestOption.ets index 72682c1..2c6089c 100644 --- a/imageknife/src/main/ets/components/imageknife/RequestOption.ets +++ b/imageknife/src/main/ets/components/imageknife/RequestOption.ets @@ -14,9 +14,9 @@ */ import { DiskStrategy } from "../cache/diskstrategy/DiskStrategy" -import type { AsyncCallback } from "../imageknife/interface/AsyncCallback" -import type { AsyncSuccess } from "../imageknife/interface/AsyncSuccess" -import type { IAllCacheInfoCallback } from "../imageknife/interface/IAllCacheInfoCallback" +import { AsyncCallback } from "../imageknife/interface/AsyncCallback" +import { AsyncSuccess } from "../imageknife/interface/AsyncSuccess" +import { IAllCacheInfoCallback } from "../imageknife/interface/IAllCacheInfoCallback" import { AUTOMATIC } from "../cache/diskstrategy/enum/AUTOMATIC" import { BaseTransform } from "../imageknife/transform/BaseTransform" import { RotateImageTransformation } from "../imageknife/transform/RotateImageTransformation" @@ -24,11 +24,11 @@ import { ImageKnifeData } from "../imageknife/ImageKnifeData" import { CenterCrop } from '../imageknife/transform/pixelmap/CenterCrop' import { CenterInside } from '../imageknife/transform/pixelmap/CenterInside' import { FitCenter } from '../imageknife/transform/pixelmap/FitCenter' -import { RoundedCornersTransformation } from '../imageknife/transform/RoundedCornersTransformation' +import { RoundedCornersTransformation, RoundCorner } from '../imageknife/transform/RoundedCornersTransformation' import { CropCircleTransformation } from '../imageknife/transform/CropCircleTransformation' -import { CropCircleWithBorderTransformation } from '../imageknife/transform/CropCircleWithBorderTransformation' +import { CropCircleWithBorderTransformation, rgbColor } from '../imageknife/transform/CropCircleWithBorderTransformation' import { CropSquareTransformation } from '../imageknife/transform/CropSquareTransformation' import { CropTransformation } from '../imageknife/transform/CropTransformation' import { CropType } from '../imageknife/transform/CropTransformation' @@ -53,35 +53,32 @@ export interface Size { height: number } export class RequestOption { - loadSrc: string | PixelMap | Resource; + loadSrc: string | PixelMap | Resource = ''; strategy: DiskStrategy = new AUTOMATIC(); dontAnimateFlag = false; - placeholderSrc: PixelMap | Resource; - placeholderFunc: AsyncSuccess; - errorholderSrc: PixelMap | Resource; - errorholderFunc: AsyncSuccess; - errorholderData: ImageKnifeData; - thumbSizeMultiplier: number; + placeholderSrc: PixelMap | Resource | undefined = undefined; + placeholderFunc: AsyncSuccess | undefined = undefined; + errorholderSrc: PixelMap | Resource | undefined = undefined; + errorholderFunc: AsyncSuccess | undefined = undefined; + errorholderData: ImageKnifeData | undefined = undefined;; + thumbSizeMultiplier: number = 0; // 如果存在缩略图,则主图延时1s加载 thumbDelayTime: number = 1000 - thumbHolderFunc: AsyncSuccess; - requestListeners: Array>; + thumbHolderFunc: AsyncSuccess | undefined = undefined; + requestListeners: Array> | undefined = undefined; // 进度条 - progressFunc: AsyncSuccess; + progressFunc: AsyncSuccess | undefined = undefined; // 重试图层 - retryholderSrc: PixelMap | Resource; - retryholderFunc: AsyncSuccess - retryholderData: ImageKnifeData - size: { - width: number, - height: number - } = { width: -1, height: -1 }; + retryholderSrc: PixelMap | Resource | undefined = undefined; + retryholderFunc: AsyncSuccess | undefined = undefined; + retryholderData: ImageKnifeData | undefined = undefined; + size:Size= { width: -1, height: -1 }; // 网络下载数据回调 - allCacheInfoCallback: IAllCacheInfoCallback; + allCacheInfoCallback: IAllCacheInfoCallback | undefined = undefined; onlyRetrieveFromCache: boolean = false; isCacheable: boolean = true; @@ -194,7 +191,9 @@ export class RequestOption { } addListener(func: AsyncCallback) { - this.requestListeners.push(func); + if(this.requestListeners != undefined) { + this.requestListeners?.push(func); + } return this; } @@ -212,7 +211,10 @@ export class RequestOption { this.onlyRetrieveFromCache = flag; } - rotateImage(degreesToRotate: number) { + rotateImage(degreesToRotate: number|undefined) { + if(degreesToRotate == undefined){ + return + } let rotateImage = new RotateImageTransformation(degreesToRotate); this.transformations.push(rotateImage); return this; @@ -233,12 +235,10 @@ export class RequestOption { return this; } - roundedCorners(obj: { - top_left: number, - top_right: number, - bottom_left: number, - bottom_right: number - }) { + roundedCorners(obj: RoundCorner) { + if(obj == undefined){ + return + } let transformation = new RoundedCornersTransformation({ top_left: obj.top_left, top_right: obj.top_right, @@ -255,11 +255,10 @@ export class RequestOption { return this; } - cropCircleWithBorder(border: number, obj: { - r_color: number, - g_color: number, - b_color: number - }) { + cropCircleWithBorder(border: number, obj: rgbColor) { + if(border == undefined || obj == undefined){ + return + } let transformation = new CropCircleWithBorderTransformation(border, obj) this.transformations.push(transformation); return this; @@ -271,7 +270,10 @@ export class RequestOption { return this; } - crop(width: number, height: number, cropType: CropType) { + crop(width: number|undefined, height: number|undefined, cropType: CropType|undefined) { + if(width == undefined || height == undefined || cropType == undefined){ + return + } let transformation = new CropTransformation(width, height, cropType) this.transformations.push(transformation); return this; @@ -283,13 +285,19 @@ export class RequestOption { return this; } - brightnessFilter(brightness: number) { + brightnessFilter(brightness: number|undefined) { + if(brightness == undefined){ + return + } let transformation = new BrightnessFilterTransformation(brightness) this.transformations.push(transformation); return this; } - contrastFilter(contrast: number) { + contrastFilter(contrast: number|undefined) { + if(contrast == undefined){ + return + } let transformation = new ContrastFilterTransformation(contrast) this.transformations.push(transformation); return this; @@ -313,43 +321,64 @@ export class RequestOption { return this; } - blur(radius: number) { + blur(radius: number|undefined) { + if(radius == undefined){ + return + } let transformation = new BlurTransformation(radius) this.transformations.push(transformation); return this; } - pixelationFilter(pixel: number) { + pixelationFilter(pixel: number|undefined) { + if(pixel == undefined){ + return + } let transformation = new PixelationFilterTransformation(pixel) this.transformations.push(transformation); return this; } - swirlFilter(degree: number) { + swirlFilter(degree: number|undefined) { + if(degree == undefined){ + return + } let transformation = new SwirlFilterTransformation(degree) this.transformations.push(transformation); return this; } - mask(maskResource: Resource) { + mask(maskResource: Resource|undefined) { + if(maskResource == undefined){ + return + } let transformation = new MaskTransformation(maskResource) this.transformations.push(transformation); return this; } - kuwaharaFilter(radius: number) { + kuwaharaFilter(radius: number|undefined) { + if(radius == undefined){ + return + } let transformation = new KuwaharaFilterTransform(radius); this.transformations.push(transformation); return this; } - toonFilter(threshold: number, quantizationLevels: number) { + toonFilter(threshold: number|undefined, quantizationLevels: number|undefined) { + if(threshold == undefined || quantizationLevels == undefined){ + return + } let transformation = new ToonFilterTransform(threshold, quantizationLevels); this.transformations.push(transformation); return this; } - vignetteFilter(centerPoint: Array, vignetteColor: Array, vignetteSpace: Array) { + vignetteFilter(centerPoint: Array|undefined, vignetteColor: Array|undefined, vignetteSpace: Array|undefined) { + if(centerPoint == undefined || vignetteColor == undefined || vignetteSpace == undefined){ + return + } let transformation = new VignetteFilterTransform(centerPoint, vignetteColor, vignetteSpace); this.transformations.push(transformation); return this; @@ -376,12 +405,14 @@ export class RequestOption { LogUtil.log("Main Image is Ready:" + this.loadMainReady); if (!this.loadMainReady && !(this.loadErrorReady || this.loadRetryReady) && !this.loadThumbnailReady) { // 主图未加载成功,并且未加载失败 显示占位图 主图加载成功或者加载失败后=>不展示占位图 - this.placeholderFunc.asyncSuccess(imageKnifeData) + if(this.placeholderSrc != undefined) { + this.placeholderFunc?.asyncSuccess(imageKnifeData) + } } } // 占位图解析失败 - placeholderOnError = (error)=>{ + placeholderOnError = (error:BusinessError|string)=>{ LogUtil.log("占位图解析失败 error =" + error) } @@ -390,7 +421,9 @@ export class RequestOption { thumbholderOnComplete = (imageKnifeData: ImageKnifeData)=> { if (!this.loadMainReady && !(this.loadErrorReady || this.loadRetryReady)) { //主图未加载成功,并且未加载失败 显示占位图 主图加载成功或者加载失败后=>不展示占位图 - this.thumbHolderFunc.asyncSuccess(imageKnifeData) + if(this.thumbHolderFunc != undefined) { + this.thumbHolderFunc?.asyncSuccess(imageKnifeData) + } } } @@ -404,33 +437,40 @@ export class RequestOption { // 如果有错误占位图 先解析并保存在RequestOption中 等到加载失败时候进行调用 this.errorholderData = imageKnifeData; if (this.loadErrorReady) { - this.errorholderFunc.asyncSuccess(imageKnifeData) + if(this.errorholderFunc != undefined) { + this.errorholderFunc.asyncSuccess(imageKnifeData) + } } } //加载失败 占位图解析失败 - errorholderOnError = (error)=> { + errorholderOnError = (error:BusinessError|string)=> { LogUtil.log("失败占位图解析失败 error =" + error) } retryholderOnComplete = (imageKnifeData: ImageKnifeData)=>{ this.retryholderData = imageKnifeData; if (this.loadRetryReady) { - this.retryholderFunc.asyncSuccess(imageKnifeData) + if(this.retryholderFunc != undefined) { + this.retryholderFunc?.asyncSuccess(imageKnifeData) + } } } - retryholderOnError = (error)=>{ + retryholderOnError = (error:BusinessError|string)=>{ LogUtil.log("重试占位图解析失败 error =" + error) } loadComplete = (imageKnifeData: ImageKnifeData)=>{ this.loadMainReady = true; // 三级缓存数据加载成功 - for (let requestListener of this.requestListeners) { - var ret = requestListener.callback("", imageKnifeData); - if (ret) { - break; + if(this.requestListeners != undefined) { + for (let i = 0;i < this.requestListeners.length; i++) { + let requestListener = this.requestListeners[i]; + let boolInterception = requestListener.callback("", imageKnifeData); + if (boolInterception) { + break; + } } } @@ -438,16 +478,22 @@ export class RequestOption { // 等落盘结束后主动调用#removeCurrentAndSearchNext方法 }else{ // 非落盘情况,直接进行寻找下一个加载 - (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); + if(ImageKnifeGlobal.getInstance().getImageKnife() != undefined) { + (ImageKnifeGlobal.getInstance().getImageKnife())?.removeRunning(this); + } } // 加载成功之后 - (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); + if(ImageKnifeGlobal.getInstance().getImageKnife() != undefined) { + (ImageKnifeGlobal.getInstance().getImageKnife())?.removeRunning(this); + } } // 图片文件落盘之后会自动去寻找下一个数据加载 removeCurrentAndSearchNext =()=>{ - (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); + if(ImageKnifeGlobal.getInstance().getImageKnife() != undefined) { + (ImageKnifeGlobal.getInstance().getImageKnife())?.removeRunning(this); + } } loadError = (err:BusinessError|string)=>{ @@ -463,11 +509,15 @@ export class RequestOption { // 失败图层标记,如果已经有数据直接展示失败图层 this.loadErrorReady = true; if (this.errorholderData != null) { - this.errorholderFunc.asyncSuccess(this.errorholderData) + if(this.errorholderFunc != undefined) { + this.errorholderFunc.asyncSuccess(this.errorholderData) + } } } // 加载失败之后 - (ImageKnifeGlobal.getInstance().getImageKnife()).removeRunning(this); + if(ImageKnifeGlobal.getInstance().getImageKnife() != undefined) { + (ImageKnifeGlobal.getInstance().getImageKnife())?.removeRunning(this); + } } } From 268d0ab3e5c1320d14d84de5fe30506c20da28d9 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Fri, 22 Sep 2023 09:11:06 +0800 Subject: [PATCH 15/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B915=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9imageknife=E6=96=87=E4=BB=B6=E5=A4=B9=20=E6=B8=85?= =?UTF-8?q?=E7=90=86codelint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- imageknife/index.ets | 136 +++++++++--------- .../ets/components/imageknife/ImageKnife.ets | 4 +- .../imageknife/ImageKnifeComponent.ets | 38 ++--- .../imageknife/ImageKnifeDrawFactory.ets | 20 +-- .../components/imageknife/RequestOption.ets | 4 +- .../imageknife/compress/CompressBuilder.ets | 2 +- .../components/imageknife/compress/Engine.ets | 2 +- .../imageknife/crop/PixelMapCrop.ets | 6 +- .../imageknife/holder/ErrorHolderManager.ets | 4 +- .../imageknife/holder/PlaceHolderManager.ets | 4 +- .../imageknife/holder/RetryHolderManager.ets | 4 +- .../requestmanage/MemoryCacheProxy.ets | 6 +- .../requestmanage/RequestManager.ets | 20 +-- .../BrightnessFilterTransformation.ets | 2 +- .../imageknife/utils/CalculatePixelUtils.ets | 2 +- .../imageknife/utils/FileTypeUtil.ets | 4 +- .../components/imageknife/utils/K2DArray.ets | 4 +- .../imageknife/utils/ParseImageUtil.ets | 2 +- .../imageknife/utils/PixelUtils.ets | 2 +- .../imageknife/utils/gif/GIFParseImpl.ets | 3 +- 20 files changed, 134 insertions(+), 135 deletions(-) diff --git a/imageknife/index.ets b/imageknife/index.ets index bbce11a..65530f9 100644 --- a/imageknife/index.ets +++ b/imageknife/index.ets @@ -18,111 +18,109 @@ * cache */ -export * from './src/main/ets/components/cache/FileUtils' -export * from './src/main/ets/components/cache/Base64' -export * from './src/main/ets/components/cache/LruCache' -export * from './src/main/ets/components/cache/diskstrategy/enum/ALL' -export * from './src/main/ets/components/cache/diskstrategy/enum/AUTOMATIC' -export * from './src/main/ets/components/cache/diskstrategy/enum/DATA' -export * from './src/main/ets/components/cache/diskstrategy/enum/NONE' -export * from './src/main/ets/components/cache/diskstrategy/enum/RESOURCE' -export type {EngineKeyInterface} from './src/main/ets/components/cache/key/EngineKeyInterface' -export * from './src/main/ets/components/cache/key/EngineKeyFactories' +export { FileUtils } from './src/main/ets/components/cache/FileUtils' +export { Base64 } from './src/main/ets/components/cache/Base64' +export { LruCache } from './src/main/ets/components/cache/LruCache' +export { ALL } from './src/main/ets/components/cache/diskstrategy/enum/ALL' +export { AUTOMATIC } from './src/main/ets/components/cache/diskstrategy/enum/AUTOMATIC' +export { DATA } from './src/main/ets/components/cache/diskstrategy/enum/DATA' +export { NONE } from './src/main/ets/components/cache/diskstrategy/enum/NONE' +export { RESOURCE } from './src/main/ets/components/cache/diskstrategy/enum/RESOURCE' +export { EngineKeyInterface } from './src/main/ets/components/cache/key/EngineKeyInterface' +export { EngineKeyFactories } from './src/main/ets/components/cache/key/EngineKeyFactories' /** * compress */ -export * from './src/main/ets/components/imageknife/compress/CompressBuilder' -export type {OnCompressListener} from './src/main/ets/components/imageknife/compress/listener/OnCompressListener' -export type {OnRenameListener} from './src/main/ets/components/imageknife/compress/listener/OnRenameListener' -export type {CompressDataListener} from './src/main/ets/components/imageknife/compress/listener/CompressDataListener' -export * from './src/main/ets/components/imageknife/compress/listener/CompressionPredicate' -export * from './src/main/ets/components/imageknife/compress/provider/CompressAdapter' -export * from './src/main/ets/components/imageknife/compress/provider/CompressProvider' -export * from './src/main/ets/components/imageknife/compress/provider/DataStringPathProvider' -export * from './src/main/ets/components/imageknife/compress/provider/RecourseProvider' +export { CompressBuilder } from './src/main/ets/components/imageknife/compress/CompressBuilder' +export { OnCompressListener } from './src/main/ets/components/imageknife/compress/listener/OnCompressListener' +export { OnRenameListener } from './src/main/ets/components/imageknife/compress/listener/OnRenameListener' +export { CompressDataListener } from './src/main/ets/components/imageknife/compress/listener/CompressDataListener' +export { CompressionPredicate } from './src/main/ets/components/imageknife/compress/listener/CompressionPredicate' +export { CompressAdapter } from './src/main/ets/components/imageknife/compress/provider/CompressAdapter' +export { CompressProvider } from './src/main/ets/components/imageknife/compress/provider/CompressProvider' +export { DataStringPathProvider } from './src/main/ets/components/imageknife/compress/provider/DataStringPathProvider' +export { RecourseProvider } from './src/main/ets/components/imageknife/compress/provider/RecourseProvider' /** * crop */ -export * from './src/main/ets/components/imageknife/crop/Crop' -export * from './src/main/ets/components/imageknife/crop/CropImage' -export * from './src/main/ets/components/imageknife/crop/CropOptions' -export * from './src/main/ets/components/imageknife/crop/PixelMapCrop' -export * from './src/main/ets/components/imageknife/crop/CropCallback' + +export { CropImage } from './src/main/ets/components/imageknife/crop/CropImage' +export { CropOptions } from './src/main/ets/components/imageknife/crop/CropOptions' +export { PixelMapCrop,Options } from './src/main/ets/components/imageknife/crop/PixelMapCrop' +export { CropCallback } from './src/main/ets/components/imageknife/crop/CropCallback' /** * transform */ -export type {BaseTransform} from './src/main/ets/components/imageknife/transform/BaseTransform' -export * from './src/main/ets/components/imageknife/transform/BlurTransformation' -export * from './src/main/ets/components/imageknife/transform/BrightnessFilterTransformation' -export * from './src/main/ets/components/imageknife/transform/ContrastFilterTransformation' -export * from './src/main/ets/components/imageknife/transform/CropCircleTransformation' -export * from './src/main/ets/components/imageknife/transform/CropCircleWithBorderTransformation' -export * from './src/main/ets/components/imageknife/transform/CropSquareTransformation' -export * from './src/main/ets/components/imageknife/transform/CropTransformation' -export * from './src/main/ets/components/imageknife/transform/GrayscaleTransformation' -export * from './src/main/ets/components/imageknife/transform/InvertFilterTransformation' -export * from './src/main/ets/components/imageknife/transform/PixelationFilterTransformation' -export * from './src/main/ets/components/imageknife/transform/RotateImageTransformation' -export * from './src/main/ets/components/imageknife/transform/RoundedCornersTransformation' -export * from './src/main/ets/components/imageknife/transform/SepiaFilterTransformation' -export * from './src/main/ets/components/imageknife/transform/SketchFilterTransformation' -export * from './src/main/ets/components/imageknife/transform/MaskTransformation' -export * from './src/main/ets/components/imageknife/transform/SwirlFilterTransformation' -export * from './src/main/ets/components/imageknife/transform/KuwaharaFilterTransform' -export * from './src/main/ets/components/imageknife/transform/ToonFilterTransform' -export * from './src/main/ets/components/imageknife/transform/VignetteFilterTransform' -export * from './src/main/ets/components/imageknife/transform/TransformUtils' -export * from './src/main/ets/components/imageknife/transform/TransformType' -export * from './src/main/ets/components/imageknife/transform/pixelmap/CenterCrop' -export * from './src/main/ets/components/imageknife/transform/pixelmap/CenterInside' -export * from './src/main/ets/components/imageknife/transform/pixelmap/FitCenter' +export { BaseTransform } from './src/main/ets/components/imageknife/transform/BaseTransform' +export { BlurTransformation } from './src/main/ets/components/imageknife/transform/BlurTransformation' +export { BrightnessFilterTransformation } from './src/main/ets/components/imageknife/transform/BrightnessFilterTransformation' +export { ContrastFilterTransformation } from './src/main/ets/components/imageknife/transform/ContrastFilterTransformation' +export { CropCircleTransformation } from './src/main/ets/components/imageknife/transform/CropCircleTransformation' +export { CropCircleWithBorderTransformation,rgbColor } from './src/main/ets/components/imageknife/transform/CropCircleWithBorderTransformation' +export { CropSquareTransformation } from './src/main/ets/components/imageknife/transform/CropSquareTransformation' +export { CropTransformation,CropType } from './src/main/ets/components/imageknife/transform/CropTransformation' +export { GrayscaleTransformation } from './src/main/ets/components/imageknife/transform/GrayscaleTransformation' +export { InvertFilterTransformation } from './src/main/ets/components/imageknife/transform/InvertFilterTransformation' +export { PixelationFilterTransformation } from './src/main/ets/components/imageknife/transform/PixelationFilterTransformation' +export { RotateImageTransformation } from './src/main/ets/components/imageknife/transform/RotateImageTransformation' +export { RoundedCornersTransformation,RoundCorner } from './src/main/ets/components/imageknife/transform/RoundedCornersTransformation' +export { SepiaFilterTransformation } from './src/main/ets/components/imageknife/transform/SepiaFilterTransformation' +export { SketchFilterTransformation } from './src/main/ets/components/imageknife/transform/SketchFilterTransformation' +export { MaskTransformation } from './src/main/ets/components/imageknife/transform/MaskTransformation' +export { SwirlFilterTransformation } from './src/main/ets/components/imageknife/transform/SwirlFilterTransformation' +export { KuwaharaFilterTransform } from './src/main/ets/components/imageknife/transform/KuwaharaFilterTransform' +export { ToonFilterTransform } from './src/main/ets/components/imageknife/transform/ToonFilterTransform' +export { VignetteFilterTransform } from './src/main/ets/components/imageknife/transform/VignetteFilterTransform' +export { TransformUtils } from './src/main/ets/components/imageknife/transform/TransformUtils' +export { TransformType } from './src/main/ets/components/imageknife/transform/TransformType' +export { CenterCrop } from './src/main/ets/components/imageknife/transform/pixelmap/CenterCrop' +export { CenterInside } from './src/main/ets/components/imageknife/transform/pixelmap/CenterInside' +export { FitCenter } from './src/main/ets/components/imageknife/transform/pixelmap/FitCenter' /** * pngj */ -export * from './src/main/ets/components/imageknife/pngj/Pngj' +export { Pngj } from './src/main/ets/components/imageknife/pngj/Pngj' export {handler} from './PngWork' -export * from './src/main/ets/components/3rd_party/upng/UPNG' +export { UPNG } from './src/main/ets/components/3rd_party/upng/UPNG' /** * ImageKnife */ -export * from './src/main/ets/components/imageknife/ImageKnife' -export * from './src/main/ets/components/imageknife/ImageKnifeGlobal' +export { ImageKnife } from './src/main/ets/components/imageknife/ImageKnife' +export { ImageKnifeGlobal } from './src/main/ets/components/imageknife/ImageKnifeGlobal' export {RequestOption,Size} from './src/main/ets/components/imageknife/RequestOption' -export * from './src/main/ets/components/imageknife/ImageKnifeComponent' -export * from './src/main/ets/components/imageknife/ImageKnifeDrawFactory' +export { ImageKnifeComponent } from './src/main/ets/components/imageknife/ImageKnifeComponent' +export { ImageKnifeDrawFactory } from './src/main/ets/components/imageknife/ImageKnifeDrawFactory' export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions} from './src/main/ets/components/imageknife/ImageKnifeOption' -export * from './src/main/ets/components/imageknife/ImageKnifeData' -export type {IAllCacheInfoCallback} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' -export type {AllCacheInfo} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' -export type {IParseImage} from './src/main/ets/components/imageknife/interface/IParseImage' -export type {IDataFetch} from './src/main/ets/components/imageknife/networkmanage/IDataFetch' -export type {ICache} from './src/main/ets/components/imageknife/requestmanage/ICache' -export * from './src/main/ets/components/imageknife/utils/FileTypeUtil' -export * from './src/main/ets/components/imageknife/utils/ParseImageUtil' +export { ImageKnifeData } from './src/main/ets/components/imageknife/ImageKnifeData' +export {IAllCacheInfoCallback} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' +export {AllCacheInfo} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' +export {IParseImage} from './src/main/ets/components/imageknife/interface/IParseImage' +export {IDataFetch} from './src/main/ets/components/imageknife/networkmanage/IDataFetch' +export {ICache} from './src/main/ets/components/imageknife/requestmanage/ICache' /** * svg parse */ -export * from './src/main/ets/components/imageknife/utils/svg/SVGParseImpl' +export { SVGParseImpl } from './src/main/ets/components/imageknife/utils/svg/SVGParseImpl' /** * gif parse */ -export * from './src/main/ets/components/imageknife/utils/gif/GIFParseImpl' -export * from './src/main/ets/components/imageknife/utils/gif/GIFFrame' +export { GIFParseImpl } from './src/main/ets/components/imageknife/utils/gif/GIFParseImpl' +export { GIFFrame } from './src/main/ets/components/imageknife/utils/gif/GIFFrame' // 能力增强worker 解析GIF数据 -export {gifHandler} from './GifWorker' +export { gifHandler } from './GifWorker' // 自定义组件新增 // 自定义组件绘制生命周期 -export type {IDrawLifeCycle} from './src/main/ets/components/imageknife/interface/IDrawLifeCycle' +export { IDrawLifeCycle } from './src/main/ets/components/imageknife/interface/IDrawLifeCycle' // 日志管理 -export * from './src/main/ets/components/imageknife/utils/LogUtil' \ No newline at end of file +export { LogUtil } from './src/main/ets/components/imageknife/utils/LogUtil' \ No newline at end of file diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets index 6244b91..4bd8554 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets @@ -54,7 +54,9 @@ export class ImageKnife { private diskCacheFolder: string = "ImageKnifeDiskCache" - private defaultListener: AsyncCallback; // 全局监听器 + private defaultListener: AsyncCallback = { + callback:(err: string, data: ImageKnifeData)=>{return false}; + }; // 全局监听器 // gifWorker private gifWorker: worker.ThreadWorker|undefined = undefined; diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets index 88ec7d6..5012101 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent.ets @@ -371,7 +371,7 @@ export struct ImageKnifeComponent { } - displayRetryholder = (data: ImageKnifeData|number)=> { + displayRetryholder = (data: ImageKnifeData|number|undefined)=> { if(data == undefined || typeof data == 'number'){ return } @@ -393,7 +393,7 @@ export struct ImageKnifeComponent { } - displayErrorholder = (data: ImageKnifeData|number)=> { + displayErrorholder = (data: ImageKnifeData|number|undefined)=> { if(data == undefined || typeof data == 'number'){ return } @@ -617,10 +617,10 @@ export struct ImageKnifeComponent { this.autoPlay = true context.clearRect(0, 0, compWidth, compHeight) - this.renderFrames_frames = frames, - this.renderFrames_index = 0, - this.renderFrames_context = context, - this.renderFrames_compWidth = compWidth, + this.renderFrames_frames = frames + this.renderFrames_index = 0 + this.renderFrames_context = context + this.renderFrames_compWidth = compWidth this.renderFrames_compHeight = compHeight this.renderFrames() @@ -652,7 +652,7 @@ export struct ImageKnifeComponent { renderFrames_compHeight: number = 0 renderFrames = ()=> { - LogUtil.log('ImageKnifeComponent renderFrames frames length =' + this.renderFrames_frames.length) + LogUtil.log('ImageKnifeComponent renderFrames frames length =' + this.renderFrames_frames?.length) let start = new Date().getTime(); if (this.renderFrames_index === 0) { // 如果是第一帧,我们只从开始渲染前记录时间 @@ -661,7 +661,7 @@ export struct ImageKnifeComponent { // draw Frame this.drawFrame(this.renderFrames_frames, this.renderFrames_index, this.renderFrames_context, this.renderFrames_compWidth, this.renderFrames_compHeight); //如果gif动图只有一帧的情况下,不进行后面代码的逐帧绘制循环 - if (this.renderFrames_frames.length <= 1) { + if (this.renderFrames_frames != undefined && this.renderFrames_frames.length <= 1) { return } @@ -672,9 +672,12 @@ export struct ImageKnifeComponent { if (this.autoPlay) { // 理论上该帧在屏幕上保留的时间 - let stayTime = this.renderFrames_frames[this.renderFrames_index].delay; + let stayTime:number= 0 + if(this.renderFrames_frames != undefined) { + stayTime = this.renderFrames_frames[this.renderFrames_index].delay; + } if (this.imageKnifeOption.gif && this.imageKnifeOption.gif.speedFactory) { - stayTime = this.renderFrames_frames[this.renderFrames_index].delay / (this.imageKnifeOption.gif.speedFactory * 1.0); + stayTime = stayTime / (this.imageKnifeOption.gif?.speedFactory * 1.0); } // 减去程序执行消耗,剩余的准确延迟时间 let delayTime = Math.max(0, Math.floor(stayTime - diff)); @@ -686,26 +689,23 @@ export struct ImageKnifeComponent { // 整个gif累计的时长; this.gifLoopDuration += loopStayTime; // 返回gif一次循环结束回调,并且把当前循环的时间给出 - if (this.renderFrames_index === (this.renderFrames_frames.length - 1) && this.imageKnifeOption.gif && this.imageKnifeOption.gif.loopFinish) { + if (this.renderFrames_frames != undefined && this.renderFrames_index === (this.renderFrames_frames.length - 1) && this.imageKnifeOption.gif != undefined && this.imageKnifeOption.gif?.loopFinish) { this.imageKnifeOption.gif.loopFinish(this.gifLoopDuration) this.gifLoopDuration = 0; } // update the frame index this.renderFrames_index++ - if (this.renderFrames_index >= this.renderFrames_frames.length) { + if (this.renderFrames_frames != undefined && this.renderFrames_index >= this.renderFrames_frames.length) { this.renderFrames_index = 0; } - - // this.renderFrames_frames, - // this.renderFrames_index, - // this.renderFrames_context, - // this.renderFrames_compWidth, - // this.renderFrames_compHeight this.gifTimerId = setTimeout(this.renderFrames, delayTime) } } - private drawFrame(frames: GIFFrame[], index: number, context: CanvasRenderingContext2D, compWidth: number, compHeight: number) { + private drawFrame(frames: GIFFrame[]|undefined, index: number, context: CanvasRenderingContext2D|undefined, compWidth: number, compHeight: number) { + if(frames == undefined){ + return + } // get current frame let frame = frames[index]; if (!frame || !context) { diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets index efe31c0..1f2cce6 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeDrawFactory.ets @@ -46,21 +46,21 @@ export class ImageKnifeDrawFactory{ displayMainSource: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { if (data.isPixelMap()) { - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { let scaleType = (typeof imageKnifeOption.mainScaleType == 'number') ? imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER context.clearRect(0,0,compWidth,compHeight) context.save(); // 绘制适配后的图像 context.save(); - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0) context.restore(); // 使用 destination-in 裁剪出椭圆 context.save(); context.globalCompositeOperation = 'destination-in' context.beginPath(); - ImageKnifeDrawFactory.setOval(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth) + ImageKnifeDrawFactory.setOval(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth) context.closePath(); context.fill() context.restore(); @@ -72,7 +72,7 @@ export class ImageKnifeDrawFactory{ context.lineWidth = borderWidth; context.globalCompositeOperation = 'source-over' context.beginPath(); - ImageKnifeDrawFactory.setOval(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0, borderWidth) + ImageKnifeDrawFactory.setOval(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight, 0, 0, borderWidth) context.closePath(); context.stroke() context.restore(); @@ -108,7 +108,7 @@ export class ImageKnifeDrawFactory{ * @param imageOffsetY * @param borderWidth */ - private static setOval(context: CanvasRenderingContext2D, scaleType: ScaleType, source: PixelMap | ImageBitmap, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX:number,imageOffsetY:number + private static setOval(context: CanvasRenderingContext2D, scaleType: ScaleType, source: PixelMap | undefined, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX:number,imageOffsetY:number ,borderWidth:number) { let scaleW = compWidth / imageWidth let scaleH = compHeight / imageHeight @@ -209,7 +209,7 @@ export class ImageKnifeDrawFactory{ displayMainSource: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { if (data.isPixelMap()) { - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { let scaleType = (typeof imageKnifeOption.mainScaleType == 'number') ? imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER context.clearRect(0,0,compWidth,compHeight) @@ -217,13 +217,13 @@ export class ImageKnifeDrawFactory{ // 绘制适配后的图像 context.save(); - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0) context.restore(); // 通过 destination-in 裁剪出圆角 context.save(); context.globalCompositeOperation = 'destination-in' - ImageKnifeDrawFactory.setRect(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) + ImageKnifeDrawFactory.setRect(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) context.fill() context.restore(); if(borderWidth > 0){ @@ -232,7 +232,7 @@ export class ImageKnifeDrawFactory{ context.strokeStyle = colorString context.lineWidth = borderWidth context.globalCompositeOperation = 'source-over' - ImageKnifeDrawFactory.setRect(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) + ImageKnifeDrawFactory.setRect(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0,borderWidth,connerRadius) context.stroke() context.restore(); } @@ -268,7 +268,7 @@ export class ImageKnifeDrawFactory{ * @param borderWidth * @param cornerRadius */ - private static setRect(context: CanvasRenderingContext2D, scaleType: ScaleType, source: PixelMap | ImageBitmap, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX:number,imageOffsetY:number + private static setRect(context: CanvasRenderingContext2D, scaleType: ScaleType, source: PixelMap | undefined, imageWidth: number, imageHeight: number, compWidth: number, compHeight: number, imageOffsetX:number,imageOffsetY:number ,borderWidth:number,cornerRadius:number) { let scaleW = compWidth / imageWidth let scaleH = compHeight / imageHeight diff --git a/imageknife/src/main/ets/components/imageknife/RequestOption.ets b/imageknife/src/main/ets/components/imageknife/RequestOption.ets index 2c6089c..3ffa238 100644 --- a/imageknife/src/main/ets/components/imageknife/RequestOption.ets +++ b/imageknife/src/main/ets/components/imageknife/RequestOption.ets @@ -235,7 +235,7 @@ export class RequestOption { return this; } - roundedCorners(obj: RoundCorner) { + roundedCorners(obj: RoundCorner|undefined) { if(obj == undefined){ return } @@ -255,7 +255,7 @@ export class RequestOption { return this; } - cropCircleWithBorder(border: number, obj: rgbColor) { + cropCircleWithBorder(border: number|undefined, obj: rgbColor|undefined) { if(border == undefined || obj == undefined){ return } diff --git a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets index aa0b5c9..7c29b89 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets @@ -38,7 +38,7 @@ export class CompressBuilder { } private _mStreamProviders: Array = new Array(); private _mFocusAlpha: boolean = false; - private _outFilePath: string; + private _outFilePath: string = ''; constructor() { this._mStreamProviders = new Array(); } diff --git a/imageknife/src/main/ets/components/imageknife/compress/Engine.ets b/imageknife/src/main/ets/components/imageknife/compress/Engine.ets index 986f78a..9a4747e 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/Engine.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/Engine.ets @@ -84,7 +84,7 @@ export class Engine { return; } - let imageResource: image.ImageSource = image.createImageSource(buffer as any); + let imageResource: image.ImageSource = image.createImageSource(buffer); imageResource.getImageInfo() .then(info => { let height = info.size.height; diff --git a/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets b/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets index ca6c4c4..d01c282 100644 --- a/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets +++ b/imageknife/src/main/ets/components/imageknife/crop/PixelMapCrop.ets @@ -17,7 +17,7 @@ import { Crop } from './Crop' import { CropCallback } from './CropCallback' import { BusinessError } from '@ohos.base' @Component -struct PixelMapCrop { +export struct PixelMapCrop { @Watch('watchOptions') @Link options: Options; @Watch('watchCropTap') @Prop cropTap: boolean = false; @State bWidth: number = 0; @@ -802,7 +802,7 @@ export class Options { pixelScale: number = 1; // 用户裁剪后的回调 - cropFunction: (error:BusinessError|string, pixelmap:PixelMap, sx:number, sy:number) => void = (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number)=>{}; + cropFunction: (error:BusinessError|string, pixelmap:PixelMap|null, sx:number, sy:number) => void = (error:BusinessError|string, pixelmap:PixelMap|null, sx:number, sy:number)=>{}; // 本地裁剪框 回调 cropAction: (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number) =>void = (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number)=>{}; @@ -812,7 +812,7 @@ export class Options { } // 裁剪动作 - setCropFunction(crop: (error:BusinessError, pixelmap:PixelMap, sx:number, sy:number) => void) { + setCropFunction(crop: (error:BusinessError|string, pixelmap:PixelMap|null, sx:number, sy:number) => void) { this.cropFunction = crop; this.cropAction = (topLeftPoint:number[], bottomRightPoint:number[], scaleInside:number) => { diff --git a/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets b/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets index b7639c5..527d447 100644 --- a/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets +++ b/imageknife/src/main/ets/components/imageknife/holder/ErrorHolderManager.ets @@ -13,12 +13,12 @@ * limitations under the License. */ -import { RequestOption } from '../../imageknife/RequestOption' +import { RequestOption,Size } from '../../imageknife/RequestOption' import { FileTypeUtil } from '../../imageknife/utils/FileTypeUtil' import { ImageKnifeData, ImageKnifeType } from '../ImageKnifeData' import { ParseImageUtil } from '../utils/ParseImageUtil' import { SupportFormat } from '../utils/FileTypeUtil' -import { SVGParseImpl,Size } from '../utils/svg/SVGParseImpl' +import { SVGParseImpl } from '../utils/svg/SVGParseImpl' import { ParseResClient } from '../resourcemanage/ParseResClient' import {LogUtil} from '../../imageknife/utils/LogUtil' import image from '@ohos.multimedia.image' diff --git a/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets b/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets index 30a0caf..612a10f 100644 --- a/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets +++ b/imageknife/src/main/ets/components/imageknife/holder/PlaceHolderManager.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {RequestOption} from "../../imageknife/RequestOption" +import {RequestOption,Size} from "../../imageknife/RequestOption" import {ResourceTypeEts} from "../../imageknife/constants/ResourceTypeEts" import {Base64} from "../../cache/Base64" import {FileTypeUtil} from "../../imageknife/utils/FileTypeUtil" @@ -20,7 +20,7 @@ import {ImageKnifeData,ImageKnifeType} from "../ImageKnifeData" import {ParseImageUtil} from '../utils/ParseImageUtil' import {ParseResClient} from '../resourcemanage/ParseResClient' import { SupportFormat } from '../utils/FileTypeUtil' -import { SVGParseImpl,Size} from '../utils/svg/SVGParseImpl' +import { SVGParseImpl} from '../utils/svg/SVGParseImpl' import {LogUtil} from '../../imageknife/utils/LogUtil' import resourceManager from '@ohos.resourceManager'; import image from "@ohos.multimedia.image" diff --git a/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets b/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets index 6a3b98a..aaf2245 100644 --- a/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets +++ b/imageknife/src/main/ets/components/imageknife/holder/RetryHolderManager.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {RequestOption} from "../../imageknife/RequestOption" +import {RequestOption,Size} from "../../imageknife/RequestOption" import {ResourceTypeEts} from "../../imageknife/constants/ResourceTypeEts" import {Base64} from "../../cache/Base64" import {FileTypeUtil} from "../../imageknife/utils/FileTypeUtil" @@ -20,7 +20,7 @@ import {ImageKnifeData,ImageKnifeType} from "../ImageKnifeData" import {ParseImageUtil} from '../utils/ParseImageUtil' import {ParseResClient} from '../resourcemanage/ParseResClient' import { SupportFormat } from '../utils/FileTypeUtil' -import { SVGParseImpl,Size } from '../utils/svg/SVGParseImpl' +import { SVGParseImpl } from '../utils/svg/SVGParseImpl' import {LogUtil} from '../../imageknife/utils/LogUtil' import resourceManager from '@ohos.resourceManager'; import image from "@ohos.multimedia.image" diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets index 889cc53..bacefa7 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/MemoryCacheProxy.ets @@ -28,7 +28,7 @@ export class MemoryCacheProxy implements ICache { return "Level1MemoryCache" } - getValue(key: K): V{ + getValue(key: K): V|undefined{ return this.mLruCache.get(key); } @@ -36,7 +36,7 @@ export class MemoryCacheProxy implements ICache { this.mLruCache.put(key, value); } - removeValue(key: K): V{ + removeValue(key: K): V|undefined{ return this.mLruCache.remove(key); } @@ -46,7 +46,7 @@ export class MemoryCacheProxy implements ICache { // 外界调用 - loadMemoryCache(key: K, isMemoryCacheable: boolean): V{ + loadMemoryCache(key: K, isMemoryCacheable: boolean): V | null{ // 是否开启内存缓存 if (!isMemoryCacheable) { return null; diff --git a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets index 4229ef2..04629b9 100644 --- a/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets +++ b/imageknife/src/main/ets/components/imageknife/requestmanage/RequestManager.ets @@ -65,10 +65,10 @@ export class RequestManager { private mMemoryCacheProxy: MemoryCacheProxy; private mDiskCacheProxy: DiskCacheProxy; private mIDataFetch: IDataFetch; - private mIResourceFetch: IResourceFetch; + private mIResourceFetch: IResourceFetch; private mParseImageUtil: IParseImage; - constructor(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { + constructor(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { this.options = option; // 缓存部分 @@ -85,7 +85,7 @@ export class RequestManager { this.mParseImageUtil = new ParseImageUtil(); } - static execute(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { + static execute(option: RequestOption, memoryCache1: LruCache, diskMemoryCache1: DiskLruCache, dataFetch: IDataFetch, resourceFetch: IResourceFetch) { LogUtil.log("RequestManager execute") let manager = new RequestManager(option, memoryCache1, diskMemoryCache1, dataFetch, resourceFetch); return new Promise(manager.process) @@ -219,7 +219,7 @@ export class RequestManager { }) } else { if (request.transformations[0]) { - request.transformations[0].transform(arrayBuffer, request, {asyncTransform:(error:BusinessError|string, pixelMap: PixelMap) => { + request.transformations[0].transform(arrayBuffer, request, {asyncTransform:(error:BusinessError|string, pixelMap: PixelMap|null) => { // 输出给Image if (pixelMap) { @@ -323,7 +323,7 @@ export class RequestManager { }) let thumbCallback = this.options.thumbholderOnComplete; let thumbError = this.options.thumbholderOnError; - this.options.transformations[0].transform(source, thumbOption,{asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, thumbOption,{asyncTransform: (error:BusinessError|string, pixelMap: PixelMap|null) => { if (pixelMap) { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); thumbCallback(imageKnifeData); @@ -332,7 +332,7 @@ export class RequestManager { } }}) setTimeout(()=>{ - this.options.transformations[0].transform(source, request, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, request, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap|null) => { if (pixelMap) { // 保存一份变换后的图片PixelMap到MemoryCache let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); @@ -345,7 +345,7 @@ export class RequestManager { },this.options.thumbDelayTime); } else { - this.options.transformations[0].transform(source, request, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, request, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap|null) => { if (pixelMap) { // 保存一份变换后的图片PixelMap到MemoryCache let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); @@ -473,7 +473,7 @@ export class RequestManager { if (this.options.thumbSizeMultiplier) { this.thumbnailProcess(source, filetype, onComplete, onError); } else { - this.options.transformations[0].transform(source, this.options, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, this.options, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap|null) => { if (pixelMap) { this.saveCacheAndDisk(pixelMap, filetype, onComplete, source); } else { @@ -543,7 +543,7 @@ export class RequestManager { }) let thumbCallback = this.options.thumbholderOnComplete let thumbError = this.options.thumbholderOnError - this.options.transformations[0].transform(source, thumbOption, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, thumbOption, {asyncTransform: (error:BusinessError|string, pixelMap: PixelMap|null) => { if (pixelMap) { let imageKnifeData = this.createImagePixelMap(ImageKnifeType.PIXELMAP, pixelMap); thumbCallback(imageKnifeData); @@ -552,7 +552,7 @@ export class RequestManager { } }}) setTimeout(() => { - this.options.transformations[0].transform(source, this.options,{asyncTransform: (error:BusinessError|string, pixelMap: PixelMap) => { + this.options.transformations[0].transform(source, this.options,{asyncTransform: (error:BusinessError|string, pixelMap: PixelMap|null) => { if (pixelMap) { this.saveCacheAndDisk(pixelMap, filetype, onComplete, source); } else { diff --git a/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets index fd5d58c..a333210 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/BrightnessFilterTransformation.ets @@ -81,7 +81,7 @@ export class BrightnessFilterTransformation implements BaseTransform { await data.readPixelsToBuffer(bufferData); if (request.gpuEnabled) { - let filter = new GPUImageBrightnessFilter(); + let filter:GPUImageBrightnessFilter = new GPUImageBrightnessFilter(); filter.setImageData(bufferData, targetWidth, targetHeight); filter.setBrightness(this._mBrightness); let buf = await filter.getPixelMapBuf(0, 0, targetWidth, targetHeight); diff --git a/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets index f7b25e1..85aa52d 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/CalculatePixelUtils.ets @@ -22,7 +22,7 @@ import { Size } from '../RequestOption' export namespace CalculatePixelUtils { export async function sketch(p: PixelMap, func?: AsyncTransform) { let imageInfo = await p.getImageInfo(); - let size = { + let size:Size = { width: imageInfo.size.width, height: imageInfo.size.height } diff --git a/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets index 526d098..21e28c7 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/FileTypeUtil.ets @@ -38,9 +38,9 @@ export class FileTypeUtil { getFileType(arraybuffer: ArrayBuffer):string { - let fileType = undefined; + let fileType:string = ''; if (arraybuffer == null || arraybuffer == undefined || arraybuffer.byteLength <= this.READ_MIN_LENGTH) { - return undefined; + return ''; } let dataView = new DataView(arraybuffer); diff --git a/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets b/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets index dc0f811..334d999 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/K2DArray.ets @@ -67,9 +67,9 @@ export class K2DArray { /** * 获取值 */ - public getValue(r: number, c: number): number { + public getValue(r: number, c: number): number|undefined{ if (r < 0 || c < 0 || r >= this.rows || c >= this.columns) { - return; + return undefined; } return this._2dArray[r][c]; } diff --git a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets index ea51f37..a4264f6 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/ParseImageUtil.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import type {IParseImage} from '../interface/IParseImage' +import {IParseImage} from '../interface/IParseImage' import image from '@ohos.multimedia.image'; import { BusinessError } from '@ohos.base' export class ParseImageUtil implements IParseImage { diff --git a/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets index e9e468a..0fbb90e 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/PixelUtils.ets @@ -31,7 +31,7 @@ export namespace pixelUtils { height: imageInfo.size.height } if (!size) { - func.asyncTransform("GrayscaleTransformation The image size does not exist.", null) + func?.asyncTransform("GrayscaleTransformation The image size does not exist.", null) return; } let targetWidth:number = size.width; 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 68cb0be..2160a45 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import type { IParseGif } from './IParseGif' +import { IParseGif } from './IParseGif' import { Dims, GIFFrame } from './GIFFrame' import { LoadType } from '../../../../../../../GifWorker' import { parseBufferToFrame } from './parse/GIFParse' @@ -169,7 +169,6 @@ export class GIFParseImpl implements IParseGif { frame['disposalType'] = pages.disposalType[i] let uint8ClampedArray = new Uint8ClampedArray(pages.patch[i]) frame['patch'] = uint8ClampedArray - pages[i] = new Uint8ClampedArray(0) frame['transparentIndex'] = pages.transparentIndex[i] images.push(frame) } From 92824c62c2b3e6178fd9cbb7286d4b752308c549 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Fri, 22 Sep 2023 10:19:22 +0800 Subject: [PATCH 16/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B916=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9entry->entryablility=20=E6=95=B4=E6=94=B9entry->pages-?= =?UTF-8?q?>model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../src/main/ets/entryability/CustomEngineKeyImpl.ets | 4 ++-- .../src/main/ets/pages/basicTestFeatureAbilityPage.ets | 10 +++++----- entry/src/main/ets/pages/model/BasicDataSource.ets | 4 ++-- entry/src/main/ets/pages/model/Material.ets | 6 +++--- entry/src/main/ets/pages/model/TestDataSource.ets | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/entry/src/main/ets/entryability/CustomEngineKeyImpl.ets b/entry/src/main/ets/entryability/CustomEngineKeyImpl.ets index a32b51f..58006f4 100644 --- a/entry/src/main/ets/entryability/CustomEngineKeyImpl.ets +++ b/entry/src/main/ets/entryability/CustomEngineKeyImpl.ets @@ -19,7 +19,7 @@ export class CustomEngineKeyImpl implements EngineKeyInterface { addOtherInfo: string = "Version=1.0.0;" constructor() { - this.redefineUrl = this.urlNeedClearToken.bind(this); + this.redefineUrl = this.urlNeedClearToken; } // request只读 generateMemoryCacheKey(loadSrc: string, size: string, transformed: string, dontAnimate: boolean): string { @@ -36,7 +36,7 @@ export class CustomEngineKeyImpl implements EngineKeyInterface { // 需求场景: 请求图片可能 请求中存在token需要清除, 可以把输入的url清除token后作为key的一部分,这样token发生变化也能命中缓存。 - urlNeedClearToken(url: string): string { + urlNeedClearToken = (url: string)=>{ if (this.isHttpRequest(url)) { return this.clearToken(url) } else { diff --git a/entry/src/main/ets/pages/basicTestFeatureAbilityPage.ets b/entry/src/main/ets/pages/basicTestFeatureAbilityPage.ets index ee87e56..fb31384 100644 --- a/entry/src/main/ets/pages/basicTestFeatureAbilityPage.ets +++ b/entry/src/main/ets/pages/basicTestFeatureAbilityPage.ets @@ -22,7 +22,7 @@ struct BasicTestFeatureAbilityPage { watchPathChange() { console.log("watchPathChange") } - urls=[ + urls:string[]=[ "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", @@ -45,10 +45,10 @@ struct BasicTestFeatureAbilityPage { "http://g.hiphotos.baidu.com/image/pic/item/6d81800a19d8bc3e770bd00d868ba61ea9d345f2.jpg", ] - @State options:Array = [] + @State options:Array = new Array aboutToAppear(){ - this.options = this.urls.map((url)=>{ + this.options = this.urls.map((url:string)=>{ return { loadSrc:url } @@ -60,11 +60,11 @@ struct BasicTestFeatureAbilityPage { Stack({ alignContent: Alignment.TopStart }) { Column() { List({ space: 20, initialIndex: 0 }) { - ForEach(this.options, (item) => { + ForEach(this.options, (item:ImageKnifeOption) => { ListItem() { ImageKnifeComponent({imageKnifeOption:item}).width(300).height(300) } - }, item => item.loadSrc) + }, (item:ImageKnifeOption )=> item.loadSrc as string) } .listDirection(Axis.Vertical) // 排列方向 .divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线 diff --git a/entry/src/main/ets/pages/model/BasicDataSource.ets b/entry/src/main/ets/pages/model/BasicDataSource.ets index b6a972d..cc31787 100644 --- a/entry/src/main/ets/pages/model/BasicDataSource.ets +++ b/entry/src/main/ets/pages/model/BasicDataSource.ets @@ -12,14 +12,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export class BasicDataSource implements IDataSource { +export class BasicDataSource implements IDataSource { private listeners: DataChangeListener[] = []; public totalCount(): number { return 0; } - public getData(index: number): any { + public getData(index: number):T | undefined { return undefined; } diff --git a/entry/src/main/ets/pages/model/Material.ets b/entry/src/main/ets/pages/model/Material.ets index ffaa7f7..dc344c5 100644 --- a/entry/src/main/ets/pages/model/Material.ets +++ b/entry/src/main/ets/pages/model/Material.ets @@ -13,7 +13,7 @@ * limitations under the License. */ export class Material{ - material_id: string; - thumbnail: string; - name: string; + material_id: string =''; + thumbnail: string = ''; + name: string =''; } \ No newline at end of file diff --git a/entry/src/main/ets/pages/model/TestDataSource.ets b/entry/src/main/ets/pages/model/TestDataSource.ets index e3c9ba4..587302e 100644 --- a/entry/src/main/ets/pages/model/TestDataSource.ets +++ b/entry/src/main/ets/pages/model/TestDataSource.ets @@ -14,7 +14,7 @@ */ import {BasicDataSource} from './BasicDataSource' import { Material } from './Material'; -export class TestDataSource extends BasicDataSource { +export class TestDataSource extends BasicDataSource { private dataArray: Material[] = [ {name:"测试CBC",thumbnail:"https://xxtool-release.zone1.meitudata.com/xxtool-pre/material/R9aT7lpEEVxawo4.jpeg!thumb-w321-webp75",material_id:"5060118818"}, {name:"通用天空1像素测试",thumbnail:"https://xxtool-release.zone1.meitudata.com/xxtool-pre/material/1V6c63lKLGPlKVo.png!thumb-w321-webp75",material_id:"506009997"}, @@ -574,7 +574,7 @@ export class TestDataSource extends BasicDataSource { return this.dataArray.length; } - public getData(index: number): any { + public getData(index: number): Material | undefined { return this.dataArray[index]; } From cfd31304d409f8b91d2e29b95e99476520b698f4 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Fri, 22 Sep 2023 17:36:55 +0800 Subject: [PATCH 17/22] =?UTF-8?q?1.ArkTs=E6=95=B4=E6=94=B917=20=E6=95=B4?= =?UTF-8?q?=E6=94=B9entry->pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- entry/src/main/ets/pages/OptionTestPage.ets | 8 +- .../main/ets/pages/basicTestFileIOPage.ets | 7 +- .../main/ets/pages/basicTestMediaImage.ets | 24 +- .../pages/basicTestResourceManagerPage.ets | 8 +- entry/src/main/ets/pages/compressPage.ets | 39 +- entry/src/main/ets/pages/cropImagePage2.ets | 26 +- .../main/ets/pages/dataShareUriLoadPage.ets | 6 +- entry/src/main/ets/pages/gifTestCasePage.ets | 13 +- entry/src/main/ets/pages/index.ets | 2 +- .../src/main/ets/pages/manyPhotoShowPage.ets | 11 +- entry/src/main/ets/pages/pngjTestCasePage.ets | 32 +- .../main/ets/pages/storageTestLruCache.ets | 2 +- entry/src/main/ets/pages/svgTestCasePage.ets | 13 +- entry/src/main/ets/pages/tempUrlTestPage.ets | 5 +- .../main/ets/pages/testAllCacheInfoPage.ets | 39 +- .../main/ets/pages/testGifDontAnimatePage.ets | 3 +- .../ets/pages/testGifLoadWithWorkerPage.ets | 6 +- .../pages/testImageKnifeOptionChangedPage.ets | 2 +- .../testImageKnifeOptionChangedPage2.ets | 5 +- .../testImageKnifeOptionChangedPage3.ets | 14 +- .../testImageKnifeOptionChangedPage4.ets | 121 +++--- .../testImageKnifeOptionChangedPage5.ets | 15 +- entry/src/main/ets/pages/testPreloadPage.ets | 111 +++--- .../main/ets/pages/testSingleFrameGifPage.ets | 4 +- .../main/ets/pages/transformPixelMapPage.ets | 360 ++++++++---------- imageknife/index.ets | 8 +- 26 files changed, 452 insertions(+), 432 deletions(-) diff --git a/entry/src/main/ets/pages/OptionTestPage.ets b/entry/src/main/ets/pages/OptionTestPage.ets index 6306ab2..1c19004 100644 --- a/entry/src/main/ets/pages/OptionTestPage.ets +++ b/entry/src/main/ets/pages/OptionTestPage.ets @@ -13,7 +13,7 @@ * limitations under the License. */ -import { ImageKnifeComponent, ImageKnifeOption,NONE } from '@ohos/imageknife' +import { ImageKnifeComponent, ImageKnifeOption,NONE,DiskStrategy } from '@ohos/imageknife' @Entry @Component @@ -39,13 +39,14 @@ struct OptionTestPage { Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Button("加载") .onClick(() => { + let setting:DiskStrategy = new NONE(); this.imageKnifeOption1 = { loadSrc: 'https://img-blog.csdn.net/20140514114029140', placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), onlyRetrieveFromCache: false, isCacheable: false, - strategy: new NONE() + strategy: setting } }).margin({ top: 5, left: 3 }) ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption1 }).width(300).height(300) @@ -55,13 +56,14 @@ struct OptionTestPage { Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Button("加载") .onClick(() => { + let setting2:DiskStrategy = new NONE(); this.imageKnifeOption2 = { loadSrc: 'https://img-blog.csdn.net/20140514114029140', placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), onlyRetrieveFromCache: true, isCacheable: true, - strategy: new NONE() + strategy: setting2 } }).margin({ top: 5, left: 3 }) ImageKnifeComponent({ imageKnifeOption: this.imageKnifeOption2 }).width(300).height(300) diff --git a/entry/src/main/ets/pages/basicTestFileIOPage.ets b/entry/src/main/ets/pages/basicTestFileIOPage.ets index d4a0019..f3695c0 100644 --- a/entry/src/main/ets/pages/basicTestFileIOPage.ets +++ b/entry/src/main/ets/pages/basicTestFileIOPage.ets @@ -15,6 +15,7 @@ import { FileUtils, ImageKnifeGlobal} from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; +import { BusinessError } from '@ohos.base' @Entry @Component @@ -25,7 +26,7 @@ struct basicTestFileIOPage { @State imageHint: string = '' @State imageFile: string = '文字提醒' @State imageRes: Resource = $r('app.media.pngSample') - @State imagePixelMap: PixelMap = undefined + @State imagePixelMap?: PixelMap = undefined @State normalPixelMap: boolean = false; @State normalResource: boolean = false; @@ -89,8 +90,8 @@ struct basicTestFileIOPage { this.imageFile = 'file://' + this.appFilePath + '/Folder1/jpgSample.gif' console.log('Folder1 imaeFile =' + this.imageFile) }) - .catch(err => { - console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); + .catch((err:BusinessError) => { + console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err as BusinessError)); }) }) Button('copy:Folder1至Folder2, 验证copyFileSync') diff --git a/entry/src/main/ets/pages/basicTestMediaImage.ets b/entry/src/main/ets/pages/basicTestMediaImage.ets index f009c2f..2504d9f 100644 --- a/entry/src/main/ets/pages/basicTestMediaImage.ets +++ b/entry/src/main/ets/pages/basicTestMediaImage.ets @@ -19,11 +19,11 @@ import resourceManager from '@ohos.resourceManager'; import { Base64 } from '@ohos/imageknife' import { ParseImageUtil } from '@ohos/imageknife' import { ImageKnifeGlobal } from '@ohos/imageknife' - +import { BusinessError } from '@ohos.base' @Entry @Component struct BasicTestMediaImage { - @State imagePixelMap: PixelMap = undefined; + @State imagePixelMap?: PixelMap = undefined; build() { Scroll() { @@ -38,10 +38,10 @@ struct BasicTestMediaImage { let parseImageUtil = new ParseImageUtil(); parseImageUtil.parseImage(arrayBuffer, (pxielmap) => { this.imagePixelMap = pxielmap; - }, (err) => { + }, (err:BusinessError|string|undefined) => { }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestMediaImage - 本地加载资源err' + JSON.stringify(err)); }) }).margin({ left: 15 }).backgroundColor(Color.Blue) @@ -54,10 +54,10 @@ struct BasicTestMediaImage { let parseImageUtil = new ParseImageUtil(); parseImageUtil.parseImage(arrayBuffer, (pxielmap) => { this.imagePixelMap = pxielmap; - }, (err) => { + },(err:BusinessError|string|undefined) => { }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestMediaImage - 本地加载资源err' + JSON.stringify(err)); }) }).margin({ left: 15 }).backgroundColor(Color.Blue) @@ -70,10 +70,10 @@ struct BasicTestMediaImage { let parseImageUtil = new ParseImageUtil(); parseImageUtil.parseImage(arrayBuffer, (pxielmap) => { this.imagePixelMap = pxielmap; - }, (err) => { + }, (err:BusinessError|string|undefined) => { }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestMediaImage - 本地加载资源err' + JSON.stringify(err)); }) }).margin({ left: 15 }).backgroundColor(Color.Blue) @@ -86,10 +86,10 @@ struct BasicTestMediaImage { let parseImageUtil = new ParseImageUtil(); parseImageUtil.parseImage(arrayBuffer, (pxielmap) => { this.imagePixelMap = pxielmap; - }, (err) => { + }, (err:BusinessError|string|undefined) => { }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestMediaImage - 本地加载资源err' + JSON.stringify(err)); }) }).margin({ left: 15 }).backgroundColor(Color.Blue) @@ -102,10 +102,10 @@ struct BasicTestMediaImage { let parseImageUtil = new ParseImageUtil(); parseImageUtil.parseImage(arrayBuffer, (pxielmap) => { this.imagePixelMap = pxielmap; - }, (err) => { + }, (err:BusinessError|string|undefined) => { }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestMediaImage - 本地加载资源err' + JSON.stringify(err)); }) }).margin({ left: 15 }).backgroundColor(Color.Blue) diff --git a/entry/src/main/ets/pages/basicTestResourceManagerPage.ets b/entry/src/main/ets/pages/basicTestResourceManagerPage.ets index f52af78..9474ba5 100644 --- a/entry/src/main/ets/pages/basicTestResourceManagerPage.ets +++ b/entry/src/main/ets/pages/basicTestResourceManagerPage.ets @@ -18,7 +18,7 @@ import {FileTypeUtil} from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; import {Base64} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' - +import { BusinessError } from '@ohos.base' @Entry @Component struct BasicTestResourceManagerPage { @@ -42,7 +42,7 @@ struct BasicTestResourceManagerPage { let fileType = filetypeUtil.getFileType(arrayBuffer); this.fileTypeStr = fileType; }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); }) }) @@ -55,7 +55,7 @@ struct BasicTestResourceManagerPage { .then(data => { console.log('ParseResClientBase64 - 本地加载资源 解析后数据data') let matchReg = ';base64,'; - var firstIndex = data.indexOf(matchReg); + let firstIndex = data.indexOf(matchReg); data = data.substring(firstIndex + matchReg.length, data.length) console.log('ParseResClientBase64 - 本地加载资源 解析后数据剔除非必要数据后data= ' + data) let arrayBuffer = Base64.getInstance() @@ -64,7 +64,7 @@ struct BasicTestResourceManagerPage { let fileType = filetypeUtil.getFileType(arrayBuffer); this.fileTypeStr = fileType; }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); }) }) diff --git a/entry/src/main/ets/pages/compressPage.ets b/entry/src/main/ets/pages/compressPage.ets index e9db808..f1c9d2f 100644 --- a/entry/src/main/ets/pages/compressPage.ets +++ b/entry/src/main/ets/pages/compressPage.ets @@ -20,8 +20,8 @@ import {ImageKnifeGlobal} from '@ohos/imageknife' @Entry @Component struct CompressPage { - @State mRPixelMap: PixelMap = undefined; - @State mFPixelMap: PixelMap = undefined; + @State mRPixelMap?: PixelMap = undefined; + @State mFPixelMap?: PixelMap = undefined; @State mResultText: string= "压缩回调结果" @State mResultPath: string= "压缩路径:" @State mAsyncPath: string= "" @@ -91,7 +91,7 @@ struct CompressPage { }.width('100%').height('100%'); } private compressAsyncRecource() { - var data = new Array(); + let data = new Array(); data.push($r('app.media.jpgSample')) console.info("asasd start compress") @@ -100,7 +100,7 @@ struct CompressPage { .load(data) .ignoreBy(100) .get() - .then((path)=>{ + .then((path:string)=>{ this.mAsyncPathHint = path; this.mAsyncPath='file://' + path; }) @@ -108,30 +108,31 @@ struct CompressPage { console.info("asasd start compress end") } private cropressRecource() { - var data = new Array(); + let data = new Array(); data.push($r('app.media.jpgSample')) - var rename: OnRenameListener = { + let rename: OnRenameListener = { reName() { return "test_1.jpg"; } } - var that = this; - var listener: OnCompressListener = { - start() { - that.mResultText = "start" + + let listener: OnCompressListener = { + start:()=>{ + this.mResultText = "start" console.info("asasd start") }, - onScuccess(p: PixelMap, path: string) { - let pack = undefined; - pack = p; - that.mRPixelMap = pack; - console.info("asasd success path:" + this.mRPixelMap) - that.mResultText = "success"; - that.mResultPath = path; + onScuccess:(p: PixelMap | null | undefined, path: string)=> { + if(p!=null && p!=undefined) { + let pack = p; + this.mRPixelMap = pack as PixelMap; + console.info("asasd success path:" + this.mRPixelMap) + this.mResultText = "success"; + this.mResultPath = path; + } }, - onError(s: string) { + onError:(s: string)=>{ console.info("asasd onError:" + s) - that.mResultText = "fail"; + this.mResultText = "fail"; } } console.info("asasd start compress") diff --git a/entry/src/main/ets/pages/cropImagePage2.ets b/entry/src/main/ets/pages/cropImagePage2.ets index 8bc2893..c1fe51b 100644 --- a/entry/src/main/ets/pages/cropImagePage2.ets +++ b/entry/src/main/ets/pages/cropImagePage2.ets @@ -17,8 +17,7 @@ import { CropImage } from '@ohos/imageknife' import { CropOptions } from '@ohos/imageknife' import { Crop } from '@ohos/imageknife' import { RecourseProvider } from '@ohos/imageknife' -import { PixelMapCropNameSpace } from '@ohos/imageknife' -import { PixelMapCrop } from '@ohos/imageknife' +import { PixelMapCrop,Options } from '@ohos/imageknife' import { CropCallback } from '@ohos/imageknife' import { FileUtils } from '@ohos/imageknife' import { ImageKnifeGlobal } from '@ohos/imageknife' @@ -45,23 +44,22 @@ export struct CropImagePage2 { .onClick(() => { ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.bmpSample').id) - .then(data => { + .then((data:Uint8Array) => { let arrayBuffer = FileUtils.getInstance().uint8ArrayToBuffer(data); let optionx = new Options(); optionx.setWidth(800) .setHeight(800) - .setCropFunction((err:BusinessError, pixelmap:PixelMap, sx:number, sy:number) => { + .setCropFunction((err:BusinessError|string, pixelmap:PixelMap|null, sx:number, sy:number) => { console.log('PMC setCropFunction callback') if (err) { console.error('PMC crop err =' + err) } else { - this.width1 = sx * px2vp(1); this.height1 = sy * px2vp(1); - this.canvasContext.drawImage(pixelmap,0,0,this.width1,this.height1) + if(pixelmap != null) { + this.canvasContext.drawImage(pixelmap, 0, 0, this.width1, this.height1) + } } - - }) optionx.loadBuffer(arrayBuffer, () => { this.options1 = optionx; @@ -90,10 +88,14 @@ export struct CropImagePage2 { }) .scale({ x: this._scale, y: this._scale, z: 1.0 }) .gesture(GestureGroup(GestureMode.Parallel, - RotationGesture({ fingers: 2 }).onActionUpdate(event => { - this._rotate = event.angle; - }), PinchGesture({ fingers: 2 }).onActionUpdate(event => { - this._scale = event.scale; + RotationGesture({ fingers: 2 }).onActionUpdate((event?: GestureEvent) => { + if(event != undefined) { + this._rotate = event.angle; + } + }), PinchGesture({ fingers: 2 }).onActionUpdate((event?: GestureEvent) => { + if(event != undefined) { + this._scale = event.scale; + } }))) } .backgroundColor(Color.Brown) diff --git a/entry/src/main/ets/pages/dataShareUriLoadPage.ets b/entry/src/main/ets/pages/dataShareUriLoadPage.ets index 5e00c29..c94b854 100644 --- a/entry/src/main/ets/pages/dataShareUriLoadPage.ets +++ b/entry/src/main/ets/pages/dataShareUriLoadPage.ets @@ -14,7 +14,7 @@ */ import mediaLibrary from '@ohos.multimedia.mediaLibrary'; import { ImageKnifeComponent, ImageKnifeOption, } from '@ohos/imageknife' -import ArkWorker from '@ohos.worker' + @Entry @Component @@ -26,7 +26,7 @@ struct DataShareUriLoadPage { placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed') }; - private globalGifWorker: any = undefined + build() { Scroll() { @@ -42,7 +42,7 @@ struct DataShareUriLoadPage { let fileKeyObj = mediaLibrary.FileKey; let imageType = mediaLibrary.MediaType.IMAGE; // 创建文件获取选项,此处参数为获取image类型的文件资源 - let imagesFetchOp = { + let imagesFetchOp:mediaLibrary.MediaFetchOptions = { selections: fileKeyObj.MEDIA_TYPE + '= ?', selectionArgs: [imageType.toString()], }; diff --git a/entry/src/main/ets/pages/gifTestCasePage.ets b/entry/src/main/ets/pages/gifTestCasePage.ets index 854f394..5d029aa 100644 --- a/entry/src/main/ets/pages/gifTestCasePage.ets +++ b/entry/src/main/ets/pages/gifTestCasePage.ets @@ -14,14 +14,15 @@ */ import {GIFParseImpl} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' -import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; +import resourceManager from '@ohos.resourceManager'; +import { BusinessError } from '@ohos.base' @Entry @Component struct gifTestCasePage { - @State pixels:PixelMap = undefined - private globalGifWorker = undefined; + @State pixels?:PixelMap = undefined + private globalGifWorker?:worker.ThreadWorker = undefined; build() { Scroll() { @@ -44,7 +45,7 @@ struct gifTestCasePage { } },undefined,true) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); }) @@ -70,7 +71,7 @@ struct gifTestCasePage { } },local_worker) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); }) @@ -93,7 +94,7 @@ struct gifTestCasePage { } }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); }) diff --git a/entry/src/main/ets/pages/index.ets b/entry/src/main/ets/pages/index.ets index 12466d3..e4ad3e3 100644 --- a/entry/src/main/ets/pages/index.ets +++ b/entry/src/main/ets/pages/index.ets @@ -23,7 +23,7 @@ import worker from '@ohos.worker'; @Entry @Component struct IndexFunctionDemo { - private globalGifWorker:any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.icon'), diff --git a/entry/src/main/ets/pages/manyPhotoShowPage.ets b/entry/src/main/ets/pages/manyPhotoShowPage.ets index a3f4218..1841360 100644 --- a/entry/src/main/ets/pages/manyPhotoShowPage.ets +++ b/entry/src/main/ets/pages/manyPhotoShowPage.ets @@ -33,10 +33,13 @@ struct ManyPhotoShowPage { Button('设置磁盘存储为50M') .onClick(()=>{ - let disk:DiskLruCache = (ImageKnifeGlobal.getInstance().getImageKnife()).getDiskMemoryCache(); - disk.setMaxSize(50*1024*1024) - Prompt.showToast({message:"设置成功"}) - + if(ImageKnifeGlobal.getInstance().getImageKnife() != undefined) { + let disk: DiskLruCache | undefined = (ImageKnifeGlobal.getInstance().getImageKnife())?.getDiskMemoryCache(); + if(disk != undefined) { + disk.setMaxSize(50 * 1024 * 1024) + Prompt.showToast({ message: "设置成功" }) + } + } }) List({ space: 20, scroller: this.elementScroller }) { diff --git a/entry/src/main/ets/pages/pngjTestCasePage.ets b/entry/src/main/ets/pages/pngjTestCasePage.ets index b2856d4..dd41224 100644 --- a/entry/src/main/ets/pages/pngjTestCasePage.ets +++ b/entry/src/main/ets/pages/pngjTestCasePage.ets @@ -19,14 +19,14 @@ import { FileUtils,ImageKnifeGlobal } from '@ohos/imageknife' import featureability from '@ohos.ability.featureAbility' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; - +import { BusinessError } from '@ohos.base' @Entry @Component struct PngjTestCasePage { - pngSource1: ArrayBuffer = undefined; - pngSource2: ArrayBuffer = undefined; - pngSource3: ArrayBuffer = undefined; - pngSource4: ArrayBuffer = undefined; + pngSource1?: ArrayBuffer = undefined; + pngSource2?: ArrayBuffer = undefined; + pngSource3?: ArrayBuffer = undefined; + pngSource4?: ArrayBuffer = undefined; pngdecodeRun1: boolean = false; pngdecodeRun2: boolean = false; pngdecodeRun3: boolean = false; @@ -60,14 +60,14 @@ struct PngjTestCasePage { this.pngSource1 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint7 = '获取buffer成功,可以测试' }) - .catch(err => { + .catch( (err:BusinessError) => { console.log('点击获取Png图片buffer err=' + err) }) }) Button('测试readPng') .onClick(() => { - if (this.pngSource1) { + if (this.pngSource1!=undefined) { if (!this.pngdecodeRun1) { this.pngdecodeRun1 = true; let pngj = new Pngj(); @@ -103,14 +103,14 @@ struct PngjTestCasePage { this.pngSource2 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint8 = '获取buffer成功,可以测试' }) - .catch(err => { + .catch((err:BusinessError) => { console.log('点击获取Png图片buffer err=' + err) }) }) Button('readPngAsync') .onClick(() => { - if (this.pngSource2) { + if (this.pngSource2!=undefined) { if (!this.pngdecodeRun2) { this.pngdecodeRun2 = true; let pngj = new Pngj(); @@ -118,7 +118,7 @@ struct PngjTestCasePage { type: 'classic', name: 'readPngImageAsync' }) - pngj.readPngImageAsync(png_worker, this.pngSource1, {pngCallback: (sender, value) => { + pngj.readPngImageAsync(png_worker, this.pngSource2!, {pngCallback: (sender:ArrayBuffer, value:Record) => { this.pngSource1 = sender this.hint2 = 'img with=' + value.width + ' img height=' + value.height + ' img depth=' + value.depth + ' img ctype=' + value.ctype @@ -148,14 +148,14 @@ struct PngjTestCasePage { this.pngSource3 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint9 = '获取buffer成功,可以测试' }) - .catch(err => { + .catch((err:BusinessError) => { console.log('点击获取Png图片buffer err=' + err) }) }) Button('测试writePngWithString') .onClick(() => { - if (this.pngSource3) { + if (this.pngSource3 != undefined) { if (!this.pngdecodeRun3) { this.pngdecodeRun3 = true; let pngj = new Pngj(); @@ -163,7 +163,7 @@ struct PngjTestCasePage { type: 'classic', name: 'writePngWithStringAsync' }) - pngj.writePngWithStringAsync(png_worker, 'hello world', this.pngSource3, {pngCallback: (sender, value) => { + pngj.writePngWithStringAsync(png_worker, 'hello world', this.pngSource3, {pngCallback: (sender:ArrayBuffer, value:ArrayBuffer) => { this.pngSource3 = sender FileUtils.getInstance().createFileProcess( this.rootFolder + '/pngj', @@ -198,13 +198,13 @@ struct PngjTestCasePage { this.pngSource4 = FileUtils.getInstance().uint8ArrayToBuffer(data); this.hint10 = '获取buffer成功,可以测试' }) - .catch(err => { + .catch((err:BusinessError) => { console.log('点击获取Png图片buffer err=' + err) }) }) Button('writePng') .onClick(()=>{ - if (this.pngSource4) { + if (this.pngSource4 != undefined) { if (!this.pngdecodeRun4) { this.pngdecodeRun4 = true; let pngj = new Pngj(); @@ -212,7 +212,7 @@ struct PngjTestCasePage { type: 'classic', name: 'writePngAsync' }) - pngj.writePngAsync(png_worker, this.pngSource4,{pngCallback: (sender, value) => { + pngj.writePngAsync(png_worker, this.pngSource4,{pngCallback: (sender:ArrayBuffer, value:ArrayBuffer) => { this.pngSource4 = sender FileUtils.getInstance().createFileProcess( this.rootFolder + '/pngj', diff --git a/entry/src/main/ets/pages/storageTestLruCache.ets b/entry/src/main/ets/pages/storageTestLruCache.ets index 5f37d73..abe8e07 100644 --- a/entry/src/main/ets/pages/storageTestLruCache.ets +++ b/entry/src/main/ets/pages/storageTestLruCache.ets @@ -15,7 +15,7 @@ import {LruCache} from '@ohos/imageknife' -function getRandomInt(min, max) { +function getRandomInt(min:number, max:number):number { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值 diff --git a/entry/src/main/ets/pages/svgTestCasePage.ets b/entry/src/main/ets/pages/svgTestCasePage.ets index fab08f2..2deb471 100644 --- a/entry/src/main/ets/pages/svgTestCasePage.ets +++ b/entry/src/main/ets/pages/svgTestCasePage.ets @@ -14,13 +14,14 @@ */ import {SVGParseImpl} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' - +import resourceManager from '@ohos.resourceManager'; +import {BusinessError} from '@ohos.base' @Entry @Component struct svgTestCasePage { - @State svgSamplePixelMap:PixelMap = undefined - @State svgIconPixelMap:PixelMap = undefined + @State svgSamplePixelMap?:PixelMap = undefined + @State svgIconPixelMap?:PixelMap = undefined build() { Scroll() { @@ -31,14 +32,14 @@ struct svgTestCasePage { ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.svgSample').id) - .then(data => { + .then((data:Uint8Array) => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data = ' + data) let svgImpl = new SVGParseImpl(); svgImpl.parseSvg(data.buffer).then((pixelmap)=>{ this.svgSamplePixelMap = pixelmap; }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); }) @@ -68,7 +69,7 @@ struct svgTestCasePage { this.svgIconPixelMap = pixelmap; }) }) - .catch(err => { + .catch((err:BusinessError) => { console.log('basicTestFileIOPage - 本地加载资源err' + JSON.stringify(err)); }) diff --git a/entry/src/main/ets/pages/tempUrlTestPage.ets b/entry/src/main/ets/pages/tempUrlTestPage.ets index 1115662..07be472 100644 --- a/entry/src/main/ets/pages/tempUrlTestPage.ets +++ b/entry/src/main/ets/pages/tempUrlTestPage.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import router from '@system.router'; + import { ImageKnifeComponent, ImageKnifeOption, @@ -20,12 +20,11 @@ import { ImageKnifeDrawFactory, ScaleType } from '@ohos/imageknife' -import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; @Entry @Component struct tempUrlTestPage { - private globalGifWorker:any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.icon'), diff --git a/entry/src/main/ets/pages/testAllCacheInfoPage.ets b/entry/src/main/ets/pages/testAllCacheInfoPage.ets index 9a6c414..0646c02 100644 --- a/entry/src/main/ets/pages/testAllCacheInfoPage.ets +++ b/entry/src/main/ets/pages/testAllCacheInfoPage.ets @@ -13,19 +13,20 @@ * limitations under the License. */ import {RequestOption} from '@ohos/imageknife' +import {ImageKnifeData} from '@ohos/imageknife' import {AllCacheInfo,IAllCacheInfoCallback} from '@ohos/imageknife' import {ImageKnifeComponent} from '@ohos/imageknife' import {TransformType} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' - +import {BusinessError} from '@ohos.base' @Entry @Component struct TestAllCacheInfoPage { - @State nativePixelMap: PixelMap = undefined; - @State networkPixelMap: PixelMap = undefined; - allCacheInfoCallback1 =(allCacheInfo)=>{ + @State nativePixelMap?: PixelMap = undefined; + @State networkPixelMap?: PixelMap = undefined; + allCacheInfoCallback1:IAllCacheInfoCallback ={callback:(allCacheInfo:AllCacheInfo)=>{ let info = allCacheInfo as AllCacheInfo; console.log("AllCacheInfoCallback imageknifecomponent1 memory ="+JSON.stringify(info.memoryCacheInfo)) console.log("AllCacheInfoCallback imageknifecomponent1 resource ="+JSON.stringify(info.resourceCacheInfo)) @@ -33,8 +34,8 @@ struct TestAllCacheInfoPage { this.cacheinfo3 = "memory="+JSON.stringify(info.memoryCacheInfo)+ "\n resource ="+JSON.stringify(info.resourceCacheInfo)+ "\n data ="+JSON.stringify(info.dataCacheInfo) - } - allCacheInfoCallback2 =(allCacheInfo)=>{ + }} + allCacheInfoCallback2:IAllCacheInfoCallback ={callback:(allCacheInfo:AllCacheInfo)=>{ let info = allCacheInfo as AllCacheInfo; console.log("AllCacheInfoCallback ImageKnifeComponent memory ="+JSON.stringify(info.memoryCacheInfo)) console.log("AllCacheInfoCallback ImageKnifeComponent resource ="+JSON.stringify(info.resourceCacheInfo)) @@ -42,7 +43,7 @@ struct TestAllCacheInfoPage { this.cacheinfo4 = "memory="+JSON.stringify(info.memoryCacheInfo)+ "\n resource ="+JSON.stringify(info.resourceCacheInfo)+ "\n data ="+JSON.stringify(info.dataCacheInfo) - } + }} @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.pngSample'), @@ -165,12 +166,11 @@ struct TestAllCacheInfoPage { let imageKnifeOption = new RequestOption(); imageKnifeOption.load($r('app.media.pngSample')) .setImageViewSize({width:300,height:300}) - .addListener((err, data) => { - let pack = undefined; - pack = data.drawPixelMap.imagePixelMap as PixelMap;; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + let pack = data.drawPixelMap?.imagePixelMap as PixelMap;; this.nativePixelMap = pack; return false; - }).addAllCacheInfoCallback((allCacheInfo)=>{ + }}).addAllCacheInfoCallback({callback:(allCacheInfo:AllCacheInfo)=>{ let info = allCacheInfo as AllCacheInfo; console.log("AllCacheInfoCallback memory ="+JSON.stringify(info.memoryCacheInfo)) console.log("AllCacheInfoCallback resource ="+JSON.stringify(info.resourceCacheInfo)) @@ -178,20 +178,19 @@ struct TestAllCacheInfoPage { this.cacheinfo1 = "memory="+JSON.stringify(info.memoryCacheInfo)+ "\n resource ="+JSON.stringify(info.resourceCacheInfo)+ "\n data ="+JSON.stringify(info.dataCacheInfo) - }) - ImageKnife.call(imageKnifeOption); + }}) + ImageKnife?.call(imageKnifeOption); } private testAllCacheInfoNetwork() { let ImageKnifeOption = new RequestOption(); ImageKnifeOption.load("https://hbimg.huabanimg.com/0ef60041445edcfd6b38d20e19024b2cd9281dcc3525a4-Vy8fYO_fw658/format/webp") - .addListener((err, data) => { - let pack = undefined; - pack = data.drawPixelMap.imagePixelMap as PixelMap; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + let pack = data.drawPixelMap?.imagePixelMap as PixelMap; this.networkPixelMap = pack; console.log("imageknife2 图片2 赋值!") return false; - }).addAllCacheInfoCallback((allCacheInfo)=>{ + }}).addAllCacheInfoCallback({callback:(allCacheInfo:AllCacheInfo)=>{ let info = allCacheInfo as AllCacheInfo; console.log("AllCacheInfoCallback memory ="+JSON.stringify(info.memoryCacheInfo)) console.log("AllCacheInfoCallback resource ="+JSON.stringify(info.resourceCacheInfo)) @@ -199,12 +198,12 @@ struct TestAllCacheInfoPage { this.cacheinfo2 = "memory="+JSON.stringify(info.memoryCacheInfo)+ "\n resource ="+JSON.stringify(info.resourceCacheInfo)+ "\n data ="+JSON.stringify(info.dataCacheInfo) - }) + }}) .setImageViewSize({width:300,height:300}) .rotateImage(180) - ImageKnife.call(ImageKnifeOption); + ImageKnife?.call(ImageKnifeOption); } } -var ImageKnife = (ImageKnifeGlobal.getInstance().getImageKnife()) \ No newline at end of file +let ImageKnife = (ImageKnifeGlobal.getInstance().getImageKnife()) \ No newline at end of file diff --git a/entry/src/main/ets/pages/testGifDontAnimatePage.ets b/entry/src/main/ets/pages/testGifDontAnimatePage.ets index ad9cc3f..494a70a 100644 --- a/entry/src/main/ets/pages/testGifDontAnimatePage.ets +++ b/entry/src/main/ets/pages/testGifDontAnimatePage.ets @@ -16,12 +16,11 @@ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' -import ArkWorker from '@ohos.worker' import worker from '@ohos.worker' @Entry @Component struct TestGifDontAnimatePage { - private globalGifWorker:any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.jpgSample'), diff --git a/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets b/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets index 993f5e9..83c990c 100644 --- a/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets +++ b/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets @@ -23,8 +23,8 @@ struct TestGifLoadWithWorkerPage { @State options: ImageKnifeOption = { loadSrc: $r('app.media.icon') } - private my_worker: worker.ThreadWorker; - private my_gif_worker: worker.ThreadWorker; + private my_worker?: worker.ThreadWorker = undefined; + private my_gif_worker?: worker.ThreadWorker = undefined; /** * 界面进入时回调 @@ -86,7 +86,7 @@ struct TestGifLoadWithWorkerPage { this.my_gif_worker.onmessage = (e: MessageEvents) => { console.log("my_gif_worker.onmessage: " + e.data) } - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.my_gif_worker) + (ImageKnifeGlobal.getInstance().getImageKnife())?.setGifWorker(this.my_gif_worker) //子线程加载gif,不阻塞toast的消失 this.options = { diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets index 827fb82..9c3d9e9 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets @@ -22,7 +22,7 @@ import worker from '@ohos.worker' @Component struct TestImageKnifeOptionChangedPage { - private globalGifWorker:any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage2.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage2.ets index 8c90a6e..1966689 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage2.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage2.ets @@ -14,9 +14,11 @@ */ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' +import {BaseTransform} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import {GrayscaleTransformation} from '@ohos/imageknife' import {SketchFilterTransformation} from '@ohos/imageknife' +import image from '@ohos.multimedia.image' @Entry @Component @@ -38,6 +40,7 @@ struct TestImageKnifeOptionChangedPage2 { Flex({direction:FlexDirection.Row}){ Button("网络jpg") .onClick(()=>{ + let rotateTrans:BaseTransform = new RotateImageTransformation(180) this.imageKnifeOption1 = { loadSrc: "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB", @@ -45,7 +48,7 @@ struct TestImageKnifeOptionChangedPage2 { errorholderSrc: $r('app.media.icon_failed'), thumbSizeMultiplier:0.1, - transformation:new RotateImageTransformation(180) + transformation:rotateTrans }; }).margin({left:5}).backgroundColor(Color.Blue) Button("png") diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets index 3442018..1f3531a 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets @@ -21,10 +21,12 @@ import {GrayscaleTransformation} from '@ohos/imageknife' import {SketchFilterTransformation} from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker' +import {BaseTransform} from '@ohos/imageknife' +import image from '@ohos.multimedia.image' @Entry @Component struct TestImageKnifeOptionChangedPage3 { - private globalGifWorker:any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.jpgSample'), @@ -42,13 +44,14 @@ struct TestImageKnifeOptionChangedPage3 { Flex({direction:FlexDirection.Row}){ Button("本地jpg") .onClick(()=>{ + let rotateTrans:BaseTransform = new RotateImageTransformation(180) this.imageKnifeOption1 = { loadSrc: $r('app.media.jpgSample'), mainScaleType: ScaleType.FIT_CENTER, placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), thumbSizeMultiplier:0.1, - transformation:new RotateImageTransformation(180), + transformation:rotateTrans, }; animateTo({ duration: 500, @@ -66,13 +69,15 @@ struct TestImageKnifeOptionChangedPage3 { }).margin({left:5}).backgroundColor(Color.Blue) Button("本地png") .onClick(()=>{ + + let rotateTrans:BaseTransform = new RotateImageTransformation(180) this.imageKnifeOption1 = { loadSrc: $r('app.media.pngSample'), mainScaleType: ScaleType.FIT_CENTER, placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), thumbSizeMultiplier:0.1, - transformation:new RotateImageTransformation(180), + transformation:rotateTrans, }; animateTo({ duration: 500, @@ -142,13 +147,14 @@ struct TestImageKnifeOptionChangedPage3 { Flex({direction:FlexDirection.Row}){ Button("网络jpg") .onClick(()=>{ + let rotateTrans:BaseTransform = new RotateImageTransformation(180) this.imageKnifeOption1 = { loadSrc: "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB", placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), displayProgress:true, thumbSizeMultiplier:0.1, - transformation:new RotateImageTransformation(180) + transformation:rotateTrans }; }).margin({left:5}).backgroundColor(Color.Blue) Button("网络png") diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets index 3b50cad..5585b14 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage4.ets @@ -22,23 +22,26 @@ import { ScaleTypeHelper, IDrawLifeCycle, ScaleType, - ImageKnifeGlobal + ImageKnifeGlobal, + BaseTransform } from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; +import image from '@ohos.multimedia.image'; + @Entry @Component struct TestImageKnifeOptionChangedPage4 { - private globalGifWorker:any = undefined + private globalGifWorker?: worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.jpgSample'), placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), - + thumbSizeMultiplier: 0.1, - drawLifeCycle:this.createViewLifeCycle() + drawLifeCycle: this.createViewLifeCycle() }; private mTimerId: number = 0 @@ -48,15 +51,16 @@ struct TestImageKnifeOptionChangedPage4 { Flex({ direction: FlexDirection.Row }) { Button("网络jpg") .onClick(() => { + let rotateTrans: BaseTransform = new RotateImageTransformation(180) this.imageKnifeOption1 = { loadSrc: "https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB", placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), - + thumbSizeMultiplier: 0.1, - transformation: new RotateImageTransformation(180), - drawLifeCycle:this.createViewLifeCycle() + transformation: rotateTrans, + drawLifeCycle: this.createViewLifeCycle() }; }).margin({ left: 5 }).backgroundColor(Color.Blue) Button("网络png") @@ -66,13 +70,14 @@ struct TestImageKnifeOptionChangedPage4 { placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), - + thumbSizeMultiplier: 0.1, transformations: [new RotateImageTransformation(180)], - drawLifeCycle:this.createViewLifeCycle() + drawLifeCycle: this.createViewLifeCycle() }; }).margin({ left: 5 }).backgroundColor(Color.Blue) }.margin({ top: 15 }) + Flex({ direction: FlexDirection.Row }) { Button("网络bmp") .onClick(() => { @@ -81,10 +86,10 @@ struct TestImageKnifeOptionChangedPage4 { placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), - + thumbSizeMultiplier: 0.1, transformations: [new GrayscaleTransformation()], - drawLifeCycle:this.createViewLifeCycle() + drawLifeCycle: this.createViewLifeCycle() }; }).margin({ left: 5 }).backgroundColor(Color.Blue) Button("网络webp") @@ -94,10 +99,10 @@ struct TestImageKnifeOptionChangedPage4 { placeholderSrc: $r('app.media.icon_loading'), errorholderSrc: $r('app.media.icon_failed'), - + thumbSizeMultiplier: 0.1, transformations: [new SketchFilterTransformation()], - drawLifeCycle:this.createViewLifeCycle() + drawLifeCycle: this.createViewLifeCycle() }; }).margin({ left: 5 }).backgroundColor(Color.Blue) }.margin({ top: 15 }) @@ -119,42 +124,52 @@ struct TestImageKnifeOptionChangedPage4 { type: 'classic', name: 'ImageKnifeParseGIF' }) - ImageKnifeGlobal.getInstance().getImageKnife().setGifWorker(this.globalGifWorker) + ImageKnifeGlobal.getInstance().getImageKnife()?.setGifWorker(this.globalGifWorker) } - aboutToDisappear(){ - if(this.globalGifWorker){ + + aboutToDisappear() { + if (this.globalGifWorker) { this.globalGifWorker.terminate(); } } - drawMainAnimate(index, context, scaleType, imagePixelMap, widthPixel, heightPixel, compWidth, compHeight) { - console.log('drawMainAnimate index = '+index) + drawMainAnimate_index: number = 0; + drawMainAnimate_context?: CanvasRenderingContext2D = undefined; + drawMainAnimate_scaleType: ScaleType = ScaleType.FIT_CENTER; + drawMainAnimate_imagePixelMap?: PixelMap = undefined; + drawMainAnimate_widthPixel: number = 0; + drawMainAnimate_heightPixel: number = 0; + drawMainAnimate_compWidth: number = 0; + drawMainAnimate_compHeight: number = 0; + drawMainAnimate = () => { + console.log('drawMainAnimate index = ' + this.drawMainAnimate_index) - let clipScale = (index / 30.0) - context.save() - context.beginPath(); + let clipScale = (this.drawMainAnimate_index / 30.0) + this.drawMainAnimate_context?.save() + this.drawMainAnimate_context?.beginPath(); let path2d = new Path2D() - let maxRadius = Math.sqrt(compWidth / 2 * compWidth / 2 + compHeight / 2 * compHeight / 2) - path2d.arc(compWidth / 2, compHeight / 2, maxRadius * clipScale, 0, Math.PI * 2) - context.clip(path2d) - context.save() - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, imagePixelMap, px2vp(widthPixel), px2vp(heightPixel), compWidth, compHeight,0,0) - context.restore(); - context.restore(); - if(index<30){ - index++ - let nextFunc = this.drawMainAnimate.bind(this,index, context, scaleType, imagePixelMap, widthPixel, heightPixel, compWidth, compHeight) - // @ts-ignore - this.mTimerId = setTimeout(nextFunc, 1000/30.0) - }else{ + let maxRadius = Math.sqrt(this.drawMainAnimate_compWidth / 2 * this.drawMainAnimate_compWidth / 2 + this.drawMainAnimate_compHeight / 2 * this.drawMainAnimate_compHeight / 2) + path2d.arc(this.drawMainAnimate_compWidth / 2, this.drawMainAnimate_compHeight / 2, maxRadius * clipScale, 0, Math.PI * 2) + this.drawMainAnimate_context?.clip(path2d) + this.drawMainAnimate_context?.save() + ScaleTypeHelper.drawImageWithScaleType(this.drawMainAnimate_context!, this.drawMainAnimate_scaleType, this.drawMainAnimate_imagePixelMap, px2vp(this.drawMainAnimate_widthPixel), px2vp(this.drawMainAnimate_heightPixel), this.drawMainAnimate_compWidth, this.drawMainAnimate_compHeight, 0, 0) + this.drawMainAnimate_context?.restore(); + this.drawMainAnimate_context?.restore(); + if (this.drawMainAnimate_index < 30) { + this.drawMainAnimate_index++ + let nextFunc = this.drawMainAnimate + + this.mTimerId = setTimeout(nextFunc, 1000 / 30.0) + } else { // 不做处理 } } - private stopAnimate(){ - if(this.mTimerId > 0){ + + private stopAnimate() { + if (this.mTimerId > 0) { clearTimeout(this.mTimerId) this.mTimerId = 0 - }else{ + } else { } } @@ -163,16 +178,16 @@ struct TestImageKnifeOptionChangedPage4 { let viewLifeCycle: IDrawLifeCycle = { // 展示占位图 displayPlaceholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + this.stopAnimate() return false; }, // 展示加载进度 displayProgress: (context: CanvasRenderingContext2D, progress: number, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + this.stopAnimate() context.save(); - context.clearRect(0,0,compWidth,compHeight) + context.clearRect(0, 0, compWidth, compHeight) let pi = Math.PI * 2 / 100; //pi 讲圆的周长划分为100份 let rate = progress - 25; let diameter = compWidth > compHeight ? compHeight : compWidth @@ -213,7 +228,7 @@ struct TestImageKnifeOptionChangedPage4 { }, // 展示缩略图 displayThumbSizeMultiplier: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + this.stopAnimate() return false; }, @@ -222,14 +237,24 @@ struct TestImageKnifeOptionChangedPage4 { displayMainSource: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { this.stopAnimate() if (data.isPixelMap()) { - // @ts-ignore - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { let scaleType = (typeof imageKnifeOption.mainScaleType == 'number') ? imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER console.log('imageinfo width =' + imageInfo.size.width + ' height=' + imageInfo.size.height + 'scaleType=' + scaleType) - let func = this.drawMainAnimate.bind(this,0, context, scaleType, data.drawPixelMap.imagePixelMap, imageInfo.size.width, imageInfo.size.height, compWidth, compHeight) - // @ts-ignore - this.mTimerId = setTimeout(func, 1000/30.0) + + this.drawMainAnimate_index = 0; + this.drawMainAnimate_context = context; + this.drawMainAnimate_scaleType = scaleType + this.drawMainAnimate_imagePixelMap = data.drawPixelMap?.imagePixelMap + this.drawMainAnimate_widthPixel = imageInfo.size.width + this.drawMainAnimate_heightPixel = imageInfo.size.height + this.drawMainAnimate_compWidth = compWidth + this.drawMainAnimate_compHeight = compHeight + + let func = this.drawMainAnimate + + this.mTimerId = setTimeout(func, 1000 / 30.0) console.log('TestImageKnifeOptionChangedPage4 drawMainSource end!') }) @@ -240,14 +265,14 @@ struct TestImageKnifeOptionChangedPage4 { // 展示重试图层 displayRetryholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + this.stopAnimate() return false; }, // 展示失败占位图 displayErrorholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + this.stopAnimate() return false; } diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets index dd61a2a..2009df8 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets @@ -25,12 +25,11 @@ import { ScaleType, ImageKnifeDrawFactory } from '@ohos/imageknife' -import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; @Entry @Component struct TestImageKnifeOptionChangedPage5 { - private globalGifWorker:any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.jpgSample'), @@ -110,7 +109,7 @@ struct TestImageKnifeOptionChangedPage5 { } private choiceViewLifeCycle(type:DrawType): IDrawLifeCycle { - let viewLifeCycle = undefined; + let viewLifeCycle:IDrawLifeCycle|undefined = undefined; switch(type){ case DrawType.Oval: viewLifeCycle = ImageKnifeDrawFactory.createOvalLifeCycle(5,"#ff00ff") @@ -123,7 +122,7 @@ struct TestImageKnifeOptionChangedPage5 { viewLifeCycle = { // 展示占位图 displayPlaceholder: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示加载进度 @@ -132,20 +131,20 @@ struct TestImageKnifeOptionChangedPage5 { }, // 展示缩略图 displayThumbSizeMultiplier: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { - // @ts-ignore + return false; }, // 展示主图 displayMainSource: (context: CanvasRenderingContext2D, data: ImageKnifeData, imageKnifeOption: ImageKnifeOption, compWidth: number, compHeight: number, setGifTimeId?: (timeId: number) => void) => { if (data.isPixelMap()) { - // @ts-ignore - data.drawPixelMap.imagePixelMap.getImageInfo().then((imageInfo) => { + + data.drawPixelMap?.imagePixelMap?.getImageInfo().then((imageInfo) => { let scaleType = (typeof imageKnifeOption.mainScaleType == 'number') ? imageKnifeOption.mainScaleType : ScaleType.FIT_CENTER console.log('imageinfo width =' + imageInfo.size.width + ' height=' + imageInfo.size.height + 'scaleType=' + scaleType) context.save(); context.clearRect(0, 0, compWidth, compHeight) - ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0) + ScaleTypeHelper.drawImageWithScaleType(context, scaleType, data.drawPixelMap?.imagePixelMap, px2vp(imageInfo.size.width), px2vp(imageInfo.size.height), compWidth, compHeight,0,0) context.restore(); console.log('TestImageKnifeOptionChangedPage4 drawMainSource end!') }) diff --git a/entry/src/main/ets/pages/testPreloadPage.ets b/entry/src/main/ets/pages/testPreloadPage.ets index a0ec611..7dcde4a 100644 --- a/entry/src/main/ets/pages/testPreloadPage.ets +++ b/entry/src/main/ets/pages/testPreloadPage.ets @@ -13,16 +13,17 @@ * limitations under the License. */ import {ImageKnifeComponent} from '@ohos/imageknife' +import {ImageKnifeData} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' import {RequestOption} from '@ohos/imageknife' import {ImageKnifeGlobal } from '@ohos/imageknife' -import ArkWorker from '@ohos.worker' import worker from '@ohos.worker' +import { BusinessError } from '@ohos.base' @Entry @Component struct TestPreloadPage { - private globalGifWorker:any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.jpgSample'), @@ -83,15 +84,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load($r('app.media.gifSample')) .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { - if (err && err.length > 0) { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + if (err) { console.log('预加载本地资源gif 出现错误! err=' + err) } else { console.log('预加载本地资源gif成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -117,15 +118,15 @@ struct TestPreloadPage { request.load($r('app.media.gifSample')) .setImageViewSize({ width: 300, height: 300 }) .dontAnimate() - .addListener((err, data) => { - if (err && err.length > 0) { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + if (err ) { console.log('预加载本地资源gif静态 出现错误! err=' + err) } else { console.log('预加载本地资源gif静态成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -152,15 +153,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load('https://gd-hbimg.huaban.com/e0a25a7cab0d7c2431978726971d61720732728a315ae-57EskW_fw658') .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载网络资源gif 出现错误! err=' + err) } else { console.log('预加载网络资源gif成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -184,15 +185,15 @@ struct TestPreloadPage { request.load('https://gd-hbimg.huaban.com/e0a25a7cab0d7c2431978726971d61720732728a315ae-57EskW_fw658') .setImageViewSize({ width: 300, height: 300 }) .dontAnimate() - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载网络资源gif静态 出现错误! err=' + err) } else { console.log('预加载网络资源gif静态成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -223,15 +224,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load($r('app.media.svgSample')) .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { - if (err && err.length > 0) { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + if (err ) { console.log('预加载本地资源svg 出现错误! err=' + err) } else { console.log('预加载本地资源svg成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -262,15 +263,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load('http://124.222.187.78/download/test.svg') .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { - if (err && err.length > 0) { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + if (err) { console.log('预加载网络资源gif 出现错误! err=' + err) } else { console.log('预加载网络资源gif成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -303,15 +304,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load($r('app.media.jpgSample')) .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载本地资源webp 出现错误! err=' + err) } else { console.log('预加载本地资源webp成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -342,15 +343,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load('https://hbimg.huabanimg.com/95a6d37a39aa0b70d48fa18dc7df8309e2e0e8e85571e-x4hhks_fw658/format/webp') .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载网络资源webp 出现错误! err=' + err) } else { console.log('预加载网络资源webp成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -381,15 +382,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load($r('app.media.bmpSample')) .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载本地资源bmp 出现错误! err=' + err) } else { console.log('预加载本地资源bmp成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -420,15 +421,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load('https://img-blog.csdn.net/20140514114029140') .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { - if (err && err.length > 0) { - console.log('预加载网络资源bmp 出现错误! err=' + err) - } else { - console.log('预加载网络资源bmp成功! imageKnifedata=' + JSON.stringify(data)) - } - return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + if (err && err.length > 0) { + console.log('预加载网络资源bmp 出现错误! err=' + err) + } else { + console.log('预加载网络资源bmp成功! imageKnifedata=' + JSON.stringify(data)) + } + return false; + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -459,15 +460,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load($r('app.media.pngSample')) .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载本地资源png 出现错误! err=' + err) } else { console.log('预加载本地资源png成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -498,15 +499,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load('https://img-blog.csdnimg.cn/20191215043500229.png') .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载网络资源bmp 出现错误! err=' + err) } else { console.log('预加载网络资源bmp成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -537,15 +538,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load($r('app.media.jpgSample')) .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载本地资源jpg 出现错误! err=' + err) } else { console.log('预加载本地资源jpg成功! imageKnifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -576,15 +577,15 @@ struct TestPreloadPage { let request = new RequestOption(); request.load('https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB') .setImageViewSize({ width: 300, height: 300 }) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { if (err && err.length > 0) { console.log('预加载网络资源jpg 出现错误! err=' + err) } else { console.log('预加载网络资源jpg成功! imageknifedata=' + JSON.stringify(data)) } return false; - }) - ImageKnifeGlobal.getInstance().getImageKnife().preload(request); + }}) + ImageKnifeGlobal.getInstance().getImageKnife()?.preload(request); }) .margin({ left: 15 }) .backgroundColor(Color.Grey) @@ -621,7 +622,7 @@ struct TestPreloadPage { name: 'ImageKnifeParseGIF' }) // gif解析在子线程,请在页面构建后创建worker,注入imageknife - ImageKnifeGlobal.getInstance().getImageKnife().setGifWorker(this.globalGifWorker) + ImageKnifeGlobal.getInstance().getImageKnife()?.setGifWorker(this.globalGifWorker) } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testSingleFrameGifPage.ets b/entry/src/main/ets/pages/testSingleFrameGifPage.ets index abcaab0..0e292c6 100644 --- a/entry/src/main/ets/pages/testSingleFrameGifPage.ets +++ b/entry/src/main/ets/pages/testSingleFrameGifPage.ets @@ -12,8 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ImageKnifeComponent } from '@ohos/imageknife/src/main/ets/components/imageknife/ImageKnifeComponent' -import { ImageKnifeOption } from '@ohos/imageknife/src/main/ets/components/imageknife/ImageKnifeOption' +import { ImageKnifeComponent } from '@ohos/imageknife' +import { ImageKnifeOption } from '@ohos/imageknife' @Entry @Component diff --git a/entry/src/main/ets/pages/transformPixelMapPage.ets b/entry/src/main/ets/pages/transformPixelMapPage.ets index 1fd08f4..ba4016e 100644 --- a/entry/src/main/ets/pages/transformPixelMapPage.ets +++ b/entry/src/main/ets/pages/transformPixelMapPage.ets @@ -32,8 +32,8 @@ import { BlurTransformation } from '@ohos/imageknife' import { PixelationFilterTransformation } from '@ohos/imageknife' import { MaskTransformation } from '@ohos/imageknife' import { SwirlFilterTransformation } from '@ohos/imageknife' - - +import { BusinessError } from '@ohos.base' +import {ImageKnifeData} from '@ohos/imageknife' /** * PixelMap transform 示例 */ @@ -45,28 +45,28 @@ let mUrl = $r('app.media.pngSample'); @Component struct TransformPixelMapPage { @State url: string = ""; - @State mCropPixelMap: PixelMap = undefined; - @State mRoundPixelMap: PixelMap = undefined; - @State mCirclePixelMap: PixelMap = undefined; - @State mCircleBorderPixelMap: PixelMap = undefined; - @State mRotatePixelMap: PixelMap = undefined; - @State mSquarePixelMap: PixelMap = undefined; - @State mClipTopPixelMap: PixelMap = undefined; - @State mClipCenterPixelMap: PixelMap = undefined; - @State mClipBottomPixelMap: PixelMap = undefined; - @State mGrayscalePixelMap: PixelMap = undefined; - @State mBrightnessPixelMap: PixelMap = undefined; - @State mContrastPixelMap: PixelMap = undefined; - @State mInvertPixelMap: PixelMap = undefined; - @State mSepiaPixelMap: PixelMap = undefined; - @State mSketchPixelMap: PixelMap = undefined; - @State mBlurPixelMap: PixelMap = undefined; - @State mPixelPixelMap: PixelMap = undefined; - @State mSwirlPixelMap: PixelMap = undefined; - @State mMaskPixelMap: PixelMap = undefined; - @State mKuwaharaPixelMap: PixelMap = undefined; - @State mToonPixelMap: PixelMap = undefined; - @State mVignettePixelMap: PixelMap = undefined; + @State mCropPixelMap?: PixelMap = undefined; + @State mRoundPixelMap?: PixelMap = undefined; + @State mCirclePixelMap?: PixelMap = undefined; + @State mCircleBorderPixelMap?: PixelMap = undefined; + @State mRotatePixelMap?: PixelMap = undefined; + @State mSquarePixelMap?: PixelMap = undefined; + @State mClipTopPixelMap?: PixelMap = undefined; + @State mClipCenterPixelMap?: PixelMap = undefined; + @State mClipBottomPixelMap?: PixelMap = undefined; + @State mGrayscalePixelMap?: PixelMap = undefined; + @State mBrightnessPixelMap?: PixelMap = undefined; + @State mContrastPixelMap?: PixelMap = undefined; + @State mInvertPixelMap?: PixelMap = undefined; + @State mSepiaPixelMap?: PixelMap = undefined; + @State mSketchPixelMap?: PixelMap = undefined; + @State mBlurPixelMap?: PixelMap = undefined; + @State mPixelPixelMap?: PixelMap = undefined; + @State mSwirlPixelMap?: PixelMap = undefined; + @State mMaskPixelMap?: PixelMap = undefined; + @State mKuwaharaPixelMap?: PixelMap = undefined; + @State mToonPixelMap?: PixelMap = undefined; + @State mVignettePixelMap?: PixelMap = undefined; build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center }) { @@ -545,67 +545,49 @@ struct TransformPixelMapPage { * centerCrop */ centerCrop() { - var imageKnifeOption = new RequestOption(); + let imageKnifeOption = new RequestOption(); imageKnifeOption.load($r('app.media.jpgSample')) // imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - this.mCropPixelMap = result; - setTimeout(() => { - let result2 = undefined; - result2 = data.drawPixelMap.imagePixelMap as PixelMap; - this.mCropPixelMap = result2; - }, 100) + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + this.mCropPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; return false; - }) + }}) .setImageViewSize({ width: vp2px(100), height: vp2px(100) }) .skipMemoryCache(true) .centerCrop(); - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** * centerInside */ centerInside() { - var imageKnifeOption = new RequestOption(); + let imageKnifeOption = new RequestOption(); imageKnifeOption.load($r('app.media.Back')) - .addListener((err, data) => { - let result = undefined; - this.mCropPixelMap = result; - setTimeout(() => { - let result2 = undefined; - result2 = data.drawPixelMap.imagePixelMap as PixelMap; - this.mCropPixelMap = result2; - }, 100) + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + this.mCropPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; return false; - }) + }}) .setImageViewSize({ width: vp2px(100), height: vp2px(100) }) .skipMemoryCache(true) .centerInside(); - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** * centerInside */ fitCenter() { - var imageKnifeOption = new RequestOption() + let imageKnifeOption = new RequestOption() imageKnifeOption.load($r('app.media.Back')) - .addListener((err, data) => { - let result = undefined; - this.mCropPixelMap = result; - setTimeout(() => { - let result2 = undefined; - result2 = data.drawPixelMap.imagePixelMap as PixelMap; - this.mCropPixelMap = result2; - }, 100) + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + this.mCropPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; return false; - }) + }}) .setImageViewSize({ width: vp2px(100), height: vp2px(100) }) .skipMemoryCache(true) .fitCenter(); - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** * 圆角设置 @@ -613,18 +595,12 @@ struct TransformPixelMapPage { roundedCornersTransformation(top_left: number, bottom_left: number, top_right: number, bottom_right: number) { - var imageKnifeOption = new RequestOption(); + let imageKnifeOption = new RequestOption(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - this.mRoundPixelMap = result; - setTimeout(() => { - let result2 = undefined; - result2 = data.drawPixelMap.imagePixelMap as PixelMap; - this.mRoundPixelMap = result2; - }, 100) + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + this.mRoundPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; return false; - }) + }}) .setImageViewSize({ width: vp2px(100), height: vp2px(100) }) .skipMemoryCache(true) .roundedCorners({ @@ -633,7 +609,7 @@ struct TransformPixelMapPage { bottom_left: bottom_left, bottom_right: bottom_right }) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** @@ -642,16 +618,16 @@ struct TransformPixelMapPage { circleTransformation() { let imageKnifeOption = new RequestOption(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mCirclePixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mCirclePixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .cropCircle() - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** @@ -659,20 +635,20 @@ struct TransformPixelMapPage { */ circleBorderTransformation(border: number) { let imageKnifeOption = new RequestOption(); - var circleTransformation = new CropCircleWithBorderTransformation(border, + let circleTransformation = new CropCircleWithBorderTransformation(border, { r_color: 255, g_color: 204, b_color: 204 }); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mCircleBorderPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mCircleBorderPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .cropCircleWithBorder(border, { r_color: 255, g_color: 204, b_color: 204 }) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** @@ -680,18 +656,18 @@ struct TransformPixelMapPage { */ transformRotate(angled: number) { let imageKnifeOption = new RequestOption(); - var transformation = new RotateImageTransformation(angled); + let transformation = new RotateImageTransformation(angled); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mRotatePixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mRotatePixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .rotateImage(angled) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** @@ -699,18 +675,18 @@ struct TransformPixelMapPage { */ transformSquare() { let imageKnifeOption = new RequestOption(); - var transformation = new CropSquareTransformation(); + let transformation = new CropSquareTransformation(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mSquarePixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mSquarePixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .cropSquare() - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** @@ -718,26 +694,26 @@ struct TransformPixelMapPage { */ clipPixelMap(width: number, height: number, cropType: CropType) { let imageKnifeOption = new RequestOption(); - var transformation = new CropTransformation(width, height, cropType); + let transformation = new CropTransformation(width, height, cropType); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + let result:PixelMap|undefined = undefined; if (cropType == CropType.TOP) { - result = data.drawPixelMap.imagePixelMap as PixelMap; + result = data.drawPixelMap?.imagePixelMap as PixelMap; this.mClipTopPixelMap = result; } else if (cropType == CropType.CENTER) { - result = data.drawPixelMap.imagePixelMap as PixelMap; + result = data.drawPixelMap?.imagePixelMap as PixelMap; this.mClipCenterPixelMap = result; } else if (cropType == CropType.BOTTOM) { - result = data.drawPixelMap.imagePixelMap as PixelMap; + result = data.drawPixelMap?.imagePixelMap as PixelMap; this.mClipBottomPixelMap = result; } return false; - }) + }}) .setImageViewSize({ width: width, height: height }) .skipMemoryCache(true) .crop(width, height, cropType) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -746,19 +722,19 @@ struct TransformPixelMapPage { */ grayscalePixelMap() { let imageKnifeOption = new RequestOption(); - var transformation = new GrayscaleTransformation(); + let transformation = new GrayscaleTransformation(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mGrayscalePixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mGrayscalePixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .grayscale() - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -767,19 +743,19 @@ struct TransformPixelMapPage { */ brightnessPixelMap(brightness: number) { let imageKnifeOption = new RequestOption(); - var transformation = new BrightnessFilterTransformation(brightness); + let transformation = new BrightnessFilterTransformation(brightness); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mBrightnessPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mBrightnessPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .brightnessFilter(brightness) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -788,19 +764,19 @@ struct TransformPixelMapPage { */ contrastPixelMap(contrast: number) { let imageKnifeOption = new RequestOption(); - var transformation = new ContrastFilterTransformation(contrast); + let transformation = new ContrastFilterTransformation(contrast); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mContrastPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mContrastPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .contrastFilter(contrast) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -809,19 +785,19 @@ struct TransformPixelMapPage { */ invertPixelMap() { let imageKnifeOption = new RequestOption(); - var transformation = new InvertFilterTransformation(); + let transformation = new InvertFilterTransformation(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mInvertPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mInvertPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .invertFilter() - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -830,19 +806,19 @@ struct TransformPixelMapPage { */ sepiaPixelMap() { let imageKnifeOption = new RequestOption(); - var transformation = new SepiaFilterTransformation(); + let transformation = new SepiaFilterTransformation(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mSepiaPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mSepiaPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .sepiaFilter() - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -851,19 +827,19 @@ struct TransformPixelMapPage { */ sketchPixelMap() { let imageKnifeOption = new RequestOption(); - var transformation = new SketchFilterTransformation(); + let transformation = new SketchFilterTransformation(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mSketchPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mSketchPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .sketchFilter() - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -872,19 +848,19 @@ struct TransformPixelMapPage { */ blurHandlePixelMap(radius: number) { let imageKnifeOption = new RequestOption(); - var transformation = new BlurTransformation(radius); + let transformation = new BlurTransformation(radius); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mBlurPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mBlurPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .blur(radius) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** @@ -892,19 +868,19 @@ struct TransformPixelMapPage { */ pixelHandlePixelMap(pixel: number) { let imageKnifeOption = new RequestOption(); - var transformation = new PixelationFilterTransformation(pixel); + let transformation = new PixelationFilterTransformation(pixel); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mPixelPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mPixelPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .pixelationFilter(pixel) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -913,20 +889,20 @@ struct TransformPixelMapPage { */ swirlHandlePixelMap() { let imageKnifeOption = new RequestOption(); - var transformation = new SwirlFilterTransformation(80); + let transformation = new SwirlFilterTransformation(80); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mSwirlPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mSwirlPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .swirlFilter(80) // .diskCacheStrategy(new NONE()) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } /** @@ -934,20 +910,20 @@ struct TransformPixelMapPage { */ maskHandlePixelMap(maskResource: Resource) { let imageKnifeOption = new RequestOption(); - var transformation = new MaskTransformation(maskResource); + let transformation = new MaskTransformation(maskResource); // imageKnifeOption.load($r('app.media.photo6')) imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mMaskPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mMaskPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .mask(maskResource) // .diskCacheStrategy(new NONE()) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -957,18 +933,18 @@ struct TransformPixelMapPage { kuwaharaHandlePixelMap() { let imageKnifeOption = new RequestOption(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mKuwaharaPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mKuwaharaPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .kuwaharaFilter(20.0) // .diskCacheStrategy(new NONE()) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -978,18 +954,18 @@ struct TransformPixelMapPage { toonHandlePixelMap() { let imageKnifeOption = new RequestOption(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mToonPixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mToonPixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .toonFilter(0.2, 50.0); // .diskCacheStrategy(new NONE()) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } @@ -999,20 +975,20 @@ struct TransformPixelMapPage { vignetteHandlePixelMap() { let imageKnifeOption = new RequestOption(); imageKnifeOption.load(mUrl) - .addListener((err, data) => { - let result = undefined; - result = data.drawPixelMap.imagePixelMap as PixelMap; - this.mVignettePixelMap = result; + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { + + this.mVignettePixelMap = data.drawPixelMap?.imagePixelMap as PixelMap; + return false; - }) + }}) .setImageViewSize({ width: vp2px(200), height: vp2px(200) }) .skipMemoryCache(true) .enableGPU() .vignetteFilter([0.5, 0.5], [0.0, 0.0, 0.0], [0.3, 0.5]) // .diskCacheStrategy(new NONE()) - ImageKnife.call(imageKnifeOption); + ImageKnife?.call(imageKnifeOption); } } -var ImageKnife = ImageKnifeGlobal.getInstance().getImageKnife(); \ No newline at end of file +let ImageKnife = ImageKnifeGlobal.getInstance().getImageKnife(); \ No newline at end of file diff --git a/imageknife/index.ets b/imageknife/index.ets index 65530f9..739c6ca 100644 --- a/imageknife/index.ets +++ b/imageknife/index.ets @@ -21,6 +21,7 @@ export { FileUtils } from './src/main/ets/components/cache/FileUtils' export { Base64 } from './src/main/ets/components/cache/Base64' export { LruCache } from './src/main/ets/components/cache/LruCache' +export { DiskStrategy } from './src/main/ets/components/cache/diskstrategy/DiskStrategy' export { ALL } from './src/main/ets/components/cache/diskstrategy/enum/ALL' export { AUTOMATIC } from './src/main/ets/components/cache/diskstrategy/enum/AUTOMATIC' export { DATA } from './src/main/ets/components/cache/diskstrategy/enum/DATA' @@ -95,15 +96,16 @@ export { UPNG } from './src/main/ets/components/3rd_party/upng/UPNG' export { ImageKnife } from './src/main/ets/components/imageknife/ImageKnife' export { ImageKnifeGlobal } from './src/main/ets/components/imageknife/ImageKnifeGlobal' export {RequestOption,Size} from './src/main/ets/components/imageknife/RequestOption' -export { ImageKnifeComponent } from './src/main/ets/components/imageknife/ImageKnifeComponent' +export { ImageKnifeComponent, ScaleType, ScaleTypeHelper } from './src/main/ets/components/imageknife/ImageKnifeComponent' export { ImageKnifeDrawFactory } from './src/main/ets/components/imageknife/ImageKnifeDrawFactory' export {ImageKnifeOption,CropCircleWithBorder,Crop,GifOptions,TransformOptions} from './src/main/ets/components/imageknife/ImageKnifeOption' export { ImageKnifeData } from './src/main/ets/components/imageknife/ImageKnifeData' -export {IAllCacheInfoCallback} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' -export {AllCacheInfo} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' +export {IAllCacheInfoCallback,AllCacheInfo,ResourceCacheInfo,MemoryCacheInfo,DataCacheInfo} from './src/main/ets/components/imageknife/interface/IAllCacheInfoCallback' export {IParseImage} from './src/main/ets/components/imageknife/interface/IParseImage' export {IDataFetch} from './src/main/ets/components/imageknife/networkmanage/IDataFetch' export {ICache} from './src/main/ets/components/imageknife/requestmanage/ICache' +export { FileTypeUtil } from './src/main/ets/components/imageknife/utils/FileTypeUtil' +export { ParseImageUtil } from './src/main/ets/components/imageknife/utils/ParseImageUtil' /** * svg parse From bd887825e75f3927b53df02ca3686966633f4152 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 25 Sep 2023 14:31:45 +0800 Subject: [PATCH 18/22] =?UTF-8?q?1.=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E6=95=B4=E6=94=B9,=E4=B8=BB=E8=A6=81=E6=B6=89=E5=8F=8AThreadWo?= =?UTF-8?q?rker=E5=92=8C=E4=B8=80=E4=BA=9B=E6=8E=A5=E5=8F=A3=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E8=AF=8D=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?= =?UTF-8?q?=202.=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF=E6=95=B4=E6=94=B9,?= =?UTF-8?q?=E4=B8=BB=E8=A6=81=E6=B6=89=E5=8F=8Acontext=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E4=B8=BAObject,Object=E5=86=8D=E6=AC=A1?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E4=B8=BAabilityContext=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../main/ets/pages/basicTestFileIOPage.ets | 8 ++-- .../main/ets/pages/basicTestMediaImage.ets | 11 ++--- .../pages/basicTestResourceManagerPage.ets | 5 ++- entry/src/main/ets/pages/compressPage.ets | 43 ++++++++++--------- entry/src/main/ets/pages/cropImagePage2.ets | 5 ++- entry/src/main/ets/pages/gifTestCasePage.ets | 13 ++++-- entry/src/main/ets/pages/index.ets | 6 ++- entry/src/main/ets/pages/pngjTestCasePage.ets | 17 ++++---- entry/src/main/ets/pages/svgTestCasePage.ets | 5 ++- entry/src/main/ets/pages/tempUrlTestPage.ets | 8 +++- .../main/ets/pages/testGifDontAnimatePage.ets | 6 ++- .../ets/pages/testGifLoadWithWorkerPage.ets | 4 +- .../pages/testImageKnifeOptionChangedPage.ets | 6 ++- .../testImageKnifeOptionChangedPage3.ets | 6 ++- .../testImageKnifeOptionChangedPage5.ets | 6 ++- entry/src/main/ets/pages/testPreloadPage.ets | 20 ++++----- .../ets/components/imageknife/ImageKnife.ets | 7 +-- .../imageknife/ImageKnifeGlobal.ets | 2 +- .../imageknife/compress/CompressBuilder.ets | 11 ++--- .../components/imageknife/compress/Engine.ets | 2 +- .../compress/listener/OnCompressListener.ets | 2 +- .../networkmanage/DownloadClient.ets | 5 ++- .../resourcemanage/ParseResClient.ets | 3 +- .../transform/MaskTransformation.ets | 3 +- .../imageknife/utils/ColorUtils.ets | 3 +- .../components/imageknife/utils/FastBlur.ets | 2 +- .../imageknife/utils/gif/GIFParseImpl.ets | 4 +- 27 files changed, 128 insertions(+), 85 deletions(-) diff --git a/entry/src/main/ets/pages/basicTestFileIOPage.ets b/entry/src/main/ets/pages/basicTestFileIOPage.ets index f3695c0..aabc863 100644 --- a/entry/src/main/ets/pages/basicTestFileIOPage.ets +++ b/entry/src/main/ets/pages/basicTestFileIOPage.ets @@ -16,7 +16,7 @@ import { FileUtils, ImageKnifeGlobal} from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; import { BusinessError } from '@ohos.base' - +import common from '@ohos.app.ability.common'; @Entry @Component struct basicTestFileIOPage { @@ -42,7 +42,7 @@ struct basicTestFileIOPage { .margin({ top: 10 }) .onClick(() => { - let data:string = (ImageKnifeGlobal.getInstance().getHapContext as Record).filesDir as string; + let data:string = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).filesDir as string; console.log('ImageKnife filesPath = ' + data) this.filePath = data this.appFilePath = data; @@ -52,7 +52,7 @@ struct basicTestFileIOPage { .margin({ top: 10 }) .onClick(() => { - let data:string = (ImageKnifeGlobal.getInstance().getHapContext as Record).cacheDir as string; + let data:string = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).cacheDir as string; console.log('ImageKnife cachesPath = ' + data) this.filePath = data this.appFilePath = data; @@ -80,7 +80,7 @@ struct basicTestFileIOPage { this.appFilePath = 'appFilePath未取到值,请按顺序从上往下,从左往右依次测试' return } - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.gifSample').id) .then(data => { console.log('result.getMedia') diff --git a/entry/src/main/ets/pages/basicTestMediaImage.ets b/entry/src/main/ets/pages/basicTestMediaImage.ets index 2504d9f..089eec6 100644 --- a/entry/src/main/ets/pages/basicTestMediaImage.ets +++ b/entry/src/main/ets/pages/basicTestMediaImage.ets @@ -20,6 +20,7 @@ import { Base64 } from '@ohos/imageknife' import { ParseImageUtil } from '@ohos/imageknife' import { ImageKnifeGlobal } from '@ohos/imageknife' import { BusinessError } from '@ohos.base' +import common from '@ohos.app.ability.common'; @Entry @Component struct BasicTestMediaImage { @@ -31,7 +32,7 @@ struct BasicTestMediaImage { Flex({ direction: FlexDirection.Row }) { Button('本地资源jpg') .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.jpgSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); @@ -47,7 +48,7 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源png') .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.pngSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); @@ -63,7 +64,7 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源bmp') .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.bmpSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); @@ -79,7 +80,7 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源webp') .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.jpgSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); @@ -95,7 +96,7 @@ struct BasicTestMediaImage { }).margin({ left: 15 }).backgroundColor(Color.Blue) Button('本地资源gif') .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.gifSample').id) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); diff --git a/entry/src/main/ets/pages/basicTestResourceManagerPage.ets b/entry/src/main/ets/pages/basicTestResourceManagerPage.ets index 9474ba5..edc59e8 100644 --- a/entry/src/main/ets/pages/basicTestResourceManagerPage.ets +++ b/entry/src/main/ets/pages/basicTestResourceManagerPage.ets @@ -19,6 +19,7 @@ import resourceManager from '@ohos.resourceManager'; import {Base64} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' import { BusinessError } from '@ohos.base' +import common from '@ohos.app.ability.common'; @Entry @Component struct BasicTestResourceManagerPage { @@ -32,7 +33,7 @@ struct BasicTestResourceManagerPage { Button('getMedia解析一张jpg图片') .margin({ top: 10 }) .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.jpgSample') .id) .then(data => { @@ -49,7 +50,7 @@ struct BasicTestResourceManagerPage { Button('getMediaBase64解析一张png图片') .margin({ top: 10 }) .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContentBase64($r('app.media.pngSample') .id) .then(data => { diff --git a/entry/src/main/ets/pages/compressPage.ets b/entry/src/main/ets/pages/compressPage.ets index f1c9d2f..e0cb3ad 100644 --- a/entry/src/main/ets/pages/compressPage.ets +++ b/entry/src/main/ets/pages/compressPage.ets @@ -94,17 +94,18 @@ struct CompressPage { let data = new Array(); data.push($r('app.media.jpgSample')) - console.info("asasd start compress") - (ImageKnifeGlobal.getInstance().getImageKnife()) - .compressBuilder() - .load(data) - .ignoreBy(100) - .get() - .then((path:string)=>{ - this.mAsyncPathHint = path; - this.mAsyncPath='file://' + path; - }) - ; + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife!=undefined) { + imageKnife + .compressBuilder() + .load(data) + .ignoreBy(100) + .get() + .then((path: string) => { + this.mAsyncPathHint = path; + this.mAsyncPath = 'file://' + path; + }); + } console.info("asasd start compress end") } private cropressRecource() { @@ -121,7 +122,7 @@ struct CompressPage { this.mResultText = "start" console.info("asasd start") }, - onScuccess:(p: PixelMap | null | undefined, path: string)=> { + onSuccess:(p: PixelMap | null | undefined, path: string)=> { if(p!=null && p!=undefined) { let pack = p; this.mRPixelMap = pack as PixelMap; @@ -136,14 +137,16 @@ struct CompressPage { } } console.info("asasd start compress") - - (ImageKnifeGlobal.getInstance().getImageKnife()) - .compressBuilder() - .load(data) - .ignoreBy(100) - .setRenameListener(rename) - .setCompressListener(listener) - .launch(); + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + (ImageKnifeGlobal.getInstance().getImageKnife()) + .compressBuilder() + .load(data) + .ignoreBy(100) + .setRenameListener(rename) + .setCompressListener(listener) + .launch(); + } console.info("asasd start compress end") } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/cropImagePage2.ets b/entry/src/main/ets/pages/cropImagePage2.ets index c1fe51b..fc76184 100644 --- a/entry/src/main/ets/pages/cropImagePage2.ets +++ b/entry/src/main/ets/pages/cropImagePage2.ets @@ -22,7 +22,8 @@ import { CropCallback } from '@ohos/imageknife' import { FileUtils } from '@ohos/imageknife' import { ImageKnifeGlobal } from '@ohos/imageknife' import { BusinessError } from '@ohos.base' - +import resourceManager from '@ohos.resourceManager'; +import common from '@ohos.app.ability.common' @Entry @Component @@ -42,7 +43,7 @@ export struct CropImagePage2 { Column() { Button('点击解析图片') .onClick(() => { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.bmpSample').id) .then((data:Uint8Array) => { let arrayBuffer = FileUtils.getInstance().uint8ArrayToBuffer(data); diff --git a/entry/src/main/ets/pages/gifTestCasePage.ets b/entry/src/main/ets/pages/gifTestCasePage.ets index 5d029aa..cb5bf16 100644 --- a/entry/src/main/ets/pages/gifTestCasePage.ets +++ b/entry/src/main/ets/pages/gifTestCasePage.ets @@ -14,9 +14,11 @@ */ import {GIFParseImpl} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' +import {ImageKnife} from '@ohos/imageknife' import worker from '@ohos.worker'; import resourceManager from '@ohos.resourceManager'; import { BusinessError } from '@ohos.base' +import common from '@ohos.app.ability.common'; @Entry @Component struct gifTestCasePage { @@ -30,7 +32,7 @@ struct gifTestCasePage { Flex({direction:FlexDirection.Row}){ Button("加载gif图片") .onClick(()=>{ - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.test').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data length= ' + data.byteLength) @@ -52,7 +54,7 @@ struct gifTestCasePage { }).margin({left:5}).backgroundColor(Color.Blue) Button("加载gif图片自带worker") .onClick(()=>{ - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.gifSample_single_frame').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data length = ' + data.byteLength) @@ -78,7 +80,7 @@ struct gifTestCasePage { }).margin({left:5}).backgroundColor(Color.Blue) Button("加载gif图片全局配置worker") .onClick(()=>{ - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.test').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data length = ' + data.byteLength) @@ -121,7 +123,10 @@ struct gifTestCasePage { type: 'classic', name: 'ImageKnifeParseGIF' }) - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + (ImageKnifeGlobal.getInstance().getImageKnife())?.setGifWorker(this.globalGifWorker) + } } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/index.ets b/entry/src/main/ets/pages/index.ets index e4ad3e3..bc929ff 100644 --- a/entry/src/main/ets/pages/index.ets +++ b/entry/src/main/ets/pages/index.ets @@ -17,6 +17,7 @@ import { ImageKnifeComponent, ImageKnifeOption, ImageKnifeGlobal, + ImageKnife } from '@ohos/imageknife' import worker from '@ohos.worker'; @@ -92,7 +93,10 @@ struct IndexFunctionDemo { name: 'ImageKnifeParseGIF' }) // gif解析在子线程,请在页面构建后创建worker,注入imageknife - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + imageKnife?.setGifWorker(this.globalGifWorker) + } } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/pngjTestCasePage.ets b/entry/src/main/ets/pages/pngjTestCasePage.ets index dd41224..390ddae 100644 --- a/entry/src/main/ets/pages/pngjTestCasePage.ets +++ b/entry/src/main/ets/pages/pngjTestCasePage.ets @@ -20,6 +20,7 @@ import featureability from '@ohos.ability.featureAbility' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker'; import { BusinessError } from '@ohos.base' +import common from '@ohos.app.ability.common'; @Entry @Component struct PngjTestCasePage { @@ -52,8 +53,8 @@ struct PngjTestCasePage { Button(this.hint7).fontSize(30) .onClick(() => { - this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; - ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext) .resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.pngSample').id) .then(data => { @@ -94,8 +95,8 @@ struct PngjTestCasePage { - this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; - ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext) .resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.pngSample').id) @@ -140,8 +141,8 @@ struct PngjTestCasePage { Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Button(this.hint9).fontSize(30) .onClick(() => { - this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; - ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext) .resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.pngSample').id) .then(data => { @@ -190,8 +191,8 @@ struct PngjTestCasePage { Button(this.hint10).fontSize(30) .onClick(() => { - this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext as Record).filesDir as string; - ((ImageKnifeGlobal.getInstance().getHapContext() as Record) + this.rootFolder = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).filesDir as string; + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext) .resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.pngSample').id) .then(data => { diff --git a/entry/src/main/ets/pages/svgTestCasePage.ets b/entry/src/main/ets/pages/svgTestCasePage.ets index 2deb471..974c129 100644 --- a/entry/src/main/ets/pages/svgTestCasePage.ets +++ b/entry/src/main/ets/pages/svgTestCasePage.ets @@ -16,6 +16,7 @@ import {SVGParseImpl} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' import resourceManager from '@ohos.resourceManager'; import {BusinessError} from '@ohos.base' +import common from '@ohos.app.ability.common'; @Entry @Component struct svgTestCasePage { @@ -30,7 +31,7 @@ struct svgTestCasePage { Button("加载SVG图片") .onClick(()=>{ - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.svgSample').id) .then((data:Uint8Array) => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data = ' + data) @@ -60,7 +61,7 @@ struct svgTestCasePage { Button("加载SVG图片") .onClick(()=>{ - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent($r('app.media.iconsvg').id) .then(data => { console.log('basicTestFileIOPage - 本地加载资源 解析后数据data = ' + data) diff --git a/entry/src/main/ets/pages/tempUrlTestPage.ets b/entry/src/main/ets/pages/tempUrlTestPage.ets index 07be472..3353fdc 100644 --- a/entry/src/main/ets/pages/tempUrlTestPage.ets +++ b/entry/src/main/ets/pages/tempUrlTestPage.ets @@ -17,6 +17,7 @@ import { ImageKnifeComponent, ImageKnifeOption, ImageKnifeGlobal, + ImageKnife, ImageKnifeDrawFactory, ScaleType } from '@ohos/imageknife' @@ -89,8 +90,11 @@ struct tempUrlTestPage { type: 'classic', name: 'ImageKnifeParseGIF' }) - // gif解析在子线程,请在页面构建后创建worker,注入imageknife - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + // gif解析在子线程,请在页面构建后创建worker,注入imageknife + imageKnife.setGifWorker(this.globalGifWorker) + } } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testGifDontAnimatePage.ets b/entry/src/main/ets/pages/testGifDontAnimatePage.ets index 494a70a..69a56cc 100644 --- a/entry/src/main/ets/pages/testGifDontAnimatePage.ets +++ b/entry/src/main/ets/pages/testGifDontAnimatePage.ets @@ -15,6 +15,7 @@ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' +import {ImageKnife} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import worker from '@ohos.worker' @Entry @@ -90,7 +91,10 @@ struct TestGifDontAnimatePage { type: 'classic', name: 'ImageKnifeParseGIF' }) - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) + let imageKnife : ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife!= undefined) { + imageKnife.setGifWorker(this.globalGifWorker) + } } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets b/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets index 83c990c..e2e7e3b 100644 --- a/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets +++ b/entry/src/main/ets/pages/testGifLoadWithWorkerPage.ets @@ -12,7 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { ImageKnife,ImageKnifeGlobal,ImageKnifeGlobal, ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife' +import { ImageKnife,ImageKnifeGlobal, ImageKnifeComponent, ImageKnifeOption } from '@ohos/imageknife' import worker, { MessageEvents } from '@ohos.worker' import Prompt from '@system.prompt' @@ -100,7 +100,7 @@ struct TestGifLoadWithWorkerPage { Button('加载gif') .margin({ top: 16 }) .onClick(() => { - console.log("ImageKnifeComponent button 加载gif onClick()") + (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(undefined) diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets index 9c3d9e9..687a98b 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage.ets @@ -15,6 +15,7 @@ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' +import {ImageKnife} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import ArkWorker from '@ohos.worker' import worker from '@ohos.worker' @@ -191,7 +192,10 @@ struct TestImageKnifeOptionChangedPage { type: 'classic', name: 'ImageKnifeParseGIF' }) - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + imageKnife.setGifWorker(this.globalGifWorker) + } } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets index 1f3531a..ccb6b5a 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage3.ets @@ -15,6 +15,7 @@ import {ImageKnifeComponent} from '@ohos/imageknife' import {ImageKnifeOption} from '@ohos/imageknife' import {ImageKnifeGlobal} from '@ohos/imageknife' +import {ImageKnife} from '@ohos/imageknife' import {ScaleType} from '@ohos/imageknife' import {RotateImageTransformation} from '@ohos/imageknife' import {GrayscaleTransformation} from '@ohos/imageknife' @@ -210,7 +211,10 @@ struct TestImageKnifeOptionChangedPage3 { type: 'classic', name: 'ImageKnifeParseGIF' }) - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + imageKnife.setGifWorker(this.globalGifWorker) + } } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets index 2009df8..ef672cd 100644 --- a/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets +++ b/entry/src/main/ets/pages/testImageKnifeOptionChangedPage5.ets @@ -18,6 +18,7 @@ import { ImageKnifeData, ImageKnifeGlobal, ImageKnifeOption, + ImageKnife, RotateImageTransformation, SketchFilterTransformation, ScaleTypeHelper, @@ -100,7 +101,10 @@ struct TestImageKnifeOptionChangedPage5 { type: 'classic', name: 'ImageKnifeParseGIF' }) - (ImageKnifeGlobal.getInstance().getImageKnife()).setGifWorker(this.globalGifWorker) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + imageKnife.setGifWorker(this.globalGifWorker) + } } aboutToDisappear(){ if(this.globalGifWorker){ diff --git a/entry/src/main/ets/pages/testPreloadPage.ets b/entry/src/main/ets/pages/testPreloadPage.ets index 7dcde4a..7924e71 100644 --- a/entry/src/main/ets/pages/testPreloadPage.ets +++ b/entry/src/main/ets/pages/testPreloadPage.ets @@ -154,7 +154,7 @@ struct TestPreloadPage { request.load('https://gd-hbimg.huaban.com/e0a25a7cab0d7c2431978726971d61720732728a315ae-57EskW_fw658') .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载网络资源gif 出现错误! err=' + err) } else { console.log('预加载网络资源gif成功! imageKnifedata=' + JSON.stringify(data)) @@ -186,7 +186,7 @@ struct TestPreloadPage { .setImageViewSize({ width: 300, height: 300 }) .dontAnimate() .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载网络资源gif静态 出现错误! err=' + err) } else { console.log('预加载网络资源gif静态成功! imageKnifedata=' + JSON.stringify(data)) @@ -305,7 +305,7 @@ struct TestPreloadPage { request.load($r('app.media.jpgSample')) .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载本地资源webp 出现错误! err=' + err) } else { console.log('预加载本地资源webp成功! imageKnifedata=' + JSON.stringify(data)) @@ -344,7 +344,7 @@ struct TestPreloadPage { request.load('https://hbimg.huabanimg.com/95a6d37a39aa0b70d48fa18dc7df8309e2e0e8e85571e-x4hhks_fw658/format/webp') .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载网络资源webp 出现错误! err=' + err) } else { console.log('预加载网络资源webp成功! imageKnifedata=' + JSON.stringify(data)) @@ -383,7 +383,7 @@ struct TestPreloadPage { request.load($r('app.media.bmpSample')) .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载本地资源bmp 出现错误! err=' + err) } else { console.log('预加载本地资源bmp成功! imageKnifedata=' + JSON.stringify(data)) @@ -422,7 +422,7 @@ struct TestPreloadPage { request.load('https://img-blog.csdn.net/20140514114029140') .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载网络资源bmp 出现错误! err=' + err) } else { console.log('预加载网络资源bmp成功! imageKnifedata=' + JSON.stringify(data)) @@ -461,7 +461,7 @@ struct TestPreloadPage { request.load($r('app.media.pngSample')) .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载本地资源png 出现错误! err=' + err) } else { console.log('预加载本地资源png成功! imageKnifedata=' + JSON.stringify(data)) @@ -500,7 +500,7 @@ struct TestPreloadPage { request.load('https://img-blog.csdnimg.cn/20191215043500229.png') .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载网络资源bmp 出现错误! err=' + err) } else { console.log('预加载网络资源bmp成功! imageKnifedata=' + JSON.stringify(data)) @@ -539,7 +539,7 @@ struct TestPreloadPage { request.load($r('app.media.jpgSample')) .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载本地资源jpg 出现错误! err=' + err) } else { console.log('预加载本地资源jpg成功! imageKnifedata=' + JSON.stringify(data)) @@ -578,7 +578,7 @@ struct TestPreloadPage { request.load('https://hbimg.huabanimg.com/cc6af25f8d782d3cf3122bef4e61571378271145735e9-vEVggB') .setImageViewSize({ width: 300, height: 300 }) .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { - if (err && err.length > 0) { + if (err) { console.log('预加载网络资源jpg 出现错误! err=' + err) } else { console.log('预加载网络资源jpg成功! imageknifedata=' + JSON.stringify(data)) diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets index 4bd8554..ea18f4e 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnife.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnife.ets @@ -36,6 +36,7 @@ import {CompressBuilder} from "../imageknife/compress/CompressBuilder" import { IDrawLifeCycle } from '../imageknife/interface/IDrawLifeCycle' import {LogUtil} from '../imageknife/utils/LogUtil' import worker from '@ohos.worker' +import common from '@ohos.app.ability.common' export class ImageKnife { static readonly SEPARATOR: string = '/' @@ -55,7 +56,7 @@ export class ImageKnife { private defaultListener: AsyncCallback = { - callback:(err: string, data: ImageKnifeData)=>{return false}; + callback:(err: string, data: ImageKnifeData)=>{return false} }; // 全局监听器 // gifWorker @@ -81,7 +82,7 @@ export class ImageKnife { this.resourceFetch = new ParseResClient(); // 初始化本地 文件保存 - this.filesPath = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; + this.filesPath = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).filesDir as string; this.runningRequest = new Array(); this.pendingRequest = new Array(); @@ -96,7 +97,7 @@ export class ImageKnife { return this.memoryCache; } - public static with(context:Record): ImageKnifeGlobal{ + public static with(context:Object): ImageKnifeGlobal{ // 存入hapContext; let global:ImageKnifeGlobal = ImageKnifeGlobal.getInstance(); global.setHapContext(context) diff --git a/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets b/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets index 93f2924..d33c890 100644 --- a/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets +++ b/imageknife/src/main/ets/components/imageknife/ImageKnifeGlobal.ets @@ -67,7 +67,7 @@ export class ImageKnifeGlobal { } } - setHapContext(hapContext:Record):void{ + setHapContext(hapContext:Object):void{ this._objects.set(GlobalEnum.HAP_CONTEXT_KEY, hapContext); } diff --git a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets index 7c29b89..f2f1177 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/CompressBuilder.ets @@ -23,6 +23,7 @@ import {RecourseProvider} from '../compress/provider/RecourseProvider' import { Engine } from '../compress/Engine' import { ImageKnife } from '../ImageKnife' import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; +import common from '@ohos.app.ability.common'; export class CompressBuilder { private _mTargetDir: string = ''; @@ -30,7 +31,7 @@ export class CompressBuilder { private _mRenameListener: OnRenameListener = {reName:()=>{return ''}}; private _mCompressListener: OnCompressListener={ start:()=> {}, - onScuccess:(p: PixelMap|null|undefined, path: string)=> {}, + onSuccess:(p: PixelMap|null|undefined, path: string)=> {}, onError:(s: string)=> {} }; private _mCompressionPredicate: CompressionPredicate ={ @@ -113,7 +114,7 @@ export class CompressBuilder { public async get():Promise { if (!this._mTargetDir) { - let context:Record = (ImageKnifeGlobal.getInstance().getHapContext() as Record); + let context= (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext); let path = context.filesDir; let timestamp = (new Date()).valueOf(); this._outFilePath = path + "/compress/" + timestamp + (Math.random() * 100).toFixed(0) + ".jpg"; @@ -131,7 +132,7 @@ export class CompressBuilder { let compressListener: OnCompressListener = { start:()=>{ }, - onScuccess:(p: PixelMap|undefined|null, path: string)=> { + onSuccess:(p: PixelMap|undefined|null, path: string)=> { resolve(path); }, onError:(s: string)=> { @@ -201,14 +202,14 @@ export class CompressBuilder { this._mCompressListener, this._mCompressionPredicate).compress(); } else { if (this._mCompressListener) { - this._mCompressListener.onScuccess(null, element.getRecoursePath()); + this._mCompressListener.onSuccess(null, element.getRecoursePath()); } } } } private getImageCacheFile() { - let context:Record = (ImageKnifeGlobal.getInstance().getHapContext() as Record) + let context = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext) let timestamp = (new Date()).valueOf(); this._outFilePath = context.filesDir + "/compress/" + timestamp + (Math.random() * 100).toFixed(0) + ".jpg"; this.startCompress(); diff --git a/imageknife/src/main/ets/components/imageknife/compress/Engine.ets b/imageknife/src/main/ets/components/imageknife/compress/Engine.ets index 9a4747e..2a70970 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/Engine.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/Engine.ets @@ -171,7 +171,7 @@ export class Engine { imageRes.createPixelMap(a) .then(bitmap => { if (this.mCompressListener) { - this.mCompressListener.onScuccess(bitmap, path); + this.mCompressListener.onSuccess(bitmap, path); } }) .catch((error:BusinessError) => { diff --git a/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets b/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets index ddb34a1..96a9a76 100644 --- a/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets +++ b/imageknife/src/main/ets/components/imageknife/compress/listener/OnCompressListener.ets @@ -23,7 +23,7 @@ export interface OnCompressListener { /** * compress success */ - onScuccess:(p: PixelMap|undefined|null, path: string)=>void; + onSuccess:(p: PixelMap|undefined|null, path: string)=>void; /** * compress fail */ diff --git a/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets b/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets index 2ddf334..820073b 100644 --- a/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets +++ b/imageknife/src/main/ets/components/imageknife/networkmanage/DownloadClient.ets @@ -20,6 +20,7 @@ import { LoadLocalFileClient } from './LoadLocalFileClient' import { LoadDataShareFileClient } from './LoadDataShareFileClient' import loadRequest from '@ohos.request'; import { ImageKnifeGlobal } from '../ImageKnifeGlobal' +import common from '@ohos.app.ability.common' // 数据加载器 export class DownloadClient implements IDataFetch { @@ -29,8 +30,8 @@ export class DownloadClient implements IDataFetch { loadData(request: RequestOption, onCompleteFunction:(img: ArrayBuffer) => void, onErrorFunction: (err: string) => void) { if (typeof request.loadSrc == 'string') { - let fileDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as Record).filesDir as string; - let cacheDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as Record).cacheDir as string + let fileDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).filesDir as string; + let cacheDir:string = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).cacheDir as string if (request.loadSrc.startsWith(fileDir) || request.loadSrc.startsWith(cacheDir)) { diff --git a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets index 21fd348..fd27e74 100644 --- a/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets +++ b/imageknife/src/main/ets/components/imageknife/resourcemanage/ParseResClient.ets @@ -18,12 +18,13 @@ import {ResourceTypeEts} from '../../imageknife/constants/ResourceTypeEts' import resourceManager from '@ohos.resourceManager'; import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; import { BusinessError } from '@ohos.base' +import common from '@ohos.app.ability.common'; export class ParseResClient implements IResourceFetch { loadResource(res: Resource, onCompleteFunction:(value:ArrayBuffer)=>void | PromiseLike, onErrorFunction:(reason?:BusinessError|string)=>void) { let resId = res.id; let resType = res.type; if (resType == ResourceTypeEts.MEDIA) { - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager) .getMediaContent(resId) .then(data => { let arrayBuffer = this.typedArrayToBuffer(data); diff --git a/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets b/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets index 40328f0..4c04a40 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/MaskTransformation.ets @@ -25,6 +25,7 @@ import { ImageKnifeGlobal } from '../ImageKnifeGlobal' import resourceManager from '@ohos.resourceManager' import { BusinessError } from '@ohos.base' import {Size} from '../../imageknife/RequestOption' +import common from '@ohos.app.ability.common' export class MaskTransformation implements BaseTransform { private _mResourceData:Resource|undefined = undefined; @@ -90,7 +91,7 @@ export class MaskTransformation implements BaseTransform { func.asyncTransform("MaskTransformation resource is empty", null) } } - let context = (ImageKnifeGlobal.getInstance().getHapContext() as Record) + let context = (ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext) if(context != undefined){ let resourceManager = context.resourceManager as resourceManager.ResourceManager if(resourceManager != undefined && this._mResourceData != undefined) diff --git a/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets b/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets index d7fc36e..ea62c11 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/ColorUtils.ets @@ -13,6 +13,7 @@ * limitations under the License. */ import resourceManager from '@ohos.resourceManager'; +import common from '@ohos.app.ability.common'; import { ImageKnifeGlobal } from '../ImageKnifeGlobal'; import {DataCallBack} from "../interface/DataCallBack" @@ -25,7 +26,7 @@ export namespace ColorUtils { export function parseColor(c: string, callback: DataCallBack) { let reColor = 'sys.color.' + c; - ((ImageKnifeGlobal.getInstance().getHapContext() as Record).resourceManager as resourceManager.ResourceManager).getString($r(reColor) + ((ImageKnifeGlobal.getInstance().getHapContext() as common.UIAbilityContext).resourceManager as resourceManager.ResourceManager).getString($r(reColor) .id, (err, color) => { if (!err) { let cos = JSON.stringify(color); diff --git a/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets b/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets index d85e8bb..1d86b37 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/FastBlur.ets @@ -306,7 +306,7 @@ export namespace fastBlur { } await bitmap.writeBufferToPixels(bufferNewData); if (func != undefined) { - func?s.asyncTransform("success", bitmap); + func?.asyncTransform("success", bitmap); } } export async function blurGPU(bitmap: PixelMap, radius: number, canReuseInBitmap: boolean, func?: AsyncTransform) { 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 2160a45..9cd5390 100644 --- a/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets +++ b/imageknife/src/main/ets/components/imageknife/utils/gif/GIFParseImpl.ets @@ -113,11 +113,11 @@ export class GIFParseImpl implements IParseGif { private useWorkerParse(worker:worker.ThreadWorker, buffer: ArrayBuffer, callback: (data?:GIFFrame[], err?:BusinessError|string) => void) { worker.onerror = (err:ErrorEvent)=>{ - callback(undefined, err) + callback(undefined, err.message) } worker.onmessageerror = (event: MessageEvents) => { - callback(undefined, event) + callback(undefined, event.type) } worker.onexit = ()=> { From 51fff045d862df82f765bc93efceb15acacd1f18 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 25 Sep 2023 16:39:21 +0800 Subject: [PATCH 19/22] =?UTF-8?q?1.=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E8=87=B32.0.6=202.=E6=9B=B4=E6=96=B0CHANGELOG.md?= =?UTF-8?q?=E6=96=87=E4=BB=B6=203.=E6=9B=B4=E6=96=B0README.md=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- CHANGELOG.md | 12 ++++++++++ README.md | 46 ++++++++++++++++++++++--------------- imageknife/oh-package.json5 | 2 +- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index da5c300..2bdb4f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +## 2.0.6 + +- ArkTs语法整改: + + globalThis.ImageKnife方式已经不可使用 + + 提供了ImageKnifeGlobal对象单例全局可访问 + + 访问ImageKnife对象需要使用ImageKnifeGlobal.getInstance().getImageKnife() + +- 适配DevEco Studio 版本:4.0(4.0.3.512), SDK: API10 (4.0.10.9) + ## 2.0.5 - 修复若干问题: diff --git a/README.md b/README.md index 54c1562..0f7f9ef 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ ohpm install @ohos/imageknife "author": "", "license": "", "dependencies": { - "@ohos/imageknife": "^2.0.2" + "@ohos/imageknife": "^2.0.6" } } ``` @@ -53,8 +53,9 @@ export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage) { windowStage.loadContent('pages/Index', (err, data) => { }); - //初始化全局ImageKnife - globalThis.ImageKnife = ImageKnife.with(this.context); + // 初始化全局ImageKnife + ImageKnife.with(this.context); + // 后续访问ImageKnife请通过:ImageKnifeGlobal.getInstance().getImageKnife()方式 } } ``` @@ -109,13 +110,13 @@ GIF图片即可。 ```extendtypescript import router from '@ohos.router' -import { ImageKnifeComponent, ImageKnifeOption, } from '@ohos/imageknife' +import { ImageKnifeComponent, ImageKnifeOption,ImageKnife } from '@ohos/imageknife' import worker from '@ohos.worker'; @Entry @Component struct IndexFunctionDemo { - private globalGifWorker: any = undefined + private globalGifWorker?:worker.ThreadWorker = undefined; @State imageKnifeOption1: ImageKnifeOption = { loadSrc: $r('app.media.icon'), placeholderSrc: $r('app.media.icon_loading'), @@ -174,9 +175,15 @@ struct IndexFunctionDemo { } aboutToAppear() { - this.globalGifWorker = new worker.ThreadWorker('entry/ets/workers/GifLoadWorker.ts') + this.globalGifWorker = new worker.ThreadWorker('entry/ets/workers/GifLoadWorker.ts', { + type: 'classic', + name: 'ImageKnifeParseGIF' + }) // gif解析在子线程,请在页面构建后创建worker,注入imageknife - globalThis.ImageKnife.setGifWorker(this.globalGifWorker) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife() + if(imageKnife != undefined) { + imageKnife.setGifWorker(this.globalGifWorker) + } } aboutToDisappear() { @@ -322,17 +329,20 @@ svg返回的都是PixelMap,gif返回GIFFrame数组),我们返回了true。 当进行加载网络图片时,可能需要展示网络下载百分比动画。但是默认的动画又不能满足需求,这个时候我们就需要自定义网络下载百分比效果。代码如下: ```typescript -import AbilityStage from '@ohos.application.AbilityStage' -import { ImageKnife, ImageKnifeDrawFactory } from '@ohos/imageknife' - -import ArkWorker from '@ohos.worker' - -export default class MyAbilityStage extends AbilityStage { - onCreate() { - globalThis.ImageKnife = ImageKnife.with(this.context); - // 全局配置网络加载进度条 - globalThis.ImageKnife.setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5)) - } +import UIAbility from '@ohos.app.ability.UIAbility'; +import window from '@ohos.window'; +import { ImageKnifeGlobal,ImageKnife,ImageKnifeDrawFactory,LogUtil } from '@ohos/imageknife' +import abilityAccessCtrl,{Permissions} from '@ohos.abilityAccessCtrl'; +export default class EntryAbility extends UIAbility { + onWindowStageCreate(windowStage: window.WindowStage) { + //.. 删除不必要代码 + windowStage.loadContent('pages/index', (err, data) => { + }); + // 初始化ImageKnifeGlobal和ImageKnife + ImageKnife.with(this.context); + // 全局配置网络加载进度条 使用ImageKnifeGlobal.getInstance().getImageKnife()访问ImageKnife +ImageKnifeGlobal.getInstance().getImageKnife().setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5)) + } } ``` diff --git a/imageknife/oh-package.json5 b/imageknife/oh-package.json5 index a2c7f94..d621bf8 100644 --- a/imageknife/oh-package.json5 +++ b/imageknife/oh-package.json5 @@ -14,7 +14,7 @@ "main": "index.ets", "repository": "https://gitee.com/openharmony-tpc/ImageKnife", "type": "module", - "version": "2.0.5-rc.0", + "version": "2.0.6", "dependencies": { "@ohos/disklrucache": "^2.0.0", "@ohos/svg": "^2.0.0", From e0589c6283d8f6a395fb06be532a716124ca10c8 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Mon, 25 Sep 2023 17:15:09 +0800 Subject: [PATCH 20/22] =?UTF-8?q?1.=E6=9B=B4=E6=96=B0build-profile.json5?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- build-profile.json5 | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/build-profile.json5 b/build-profile.json5 index 0ac1294..dadde8e 100644 --- a/build-profile.json5 +++ b/build-profile.json5 @@ -1,14 +1,21 @@ { "app": { - "compileSdkVersion": 9, - "compatibleSdkVersion": 9, "products": [ { "name": "default", - "signingConfig": "default" + "signingConfig": "default", + "compileSdkVersion": 10, + "compatibleSdkVersion": 10 } ], - "signingConfigs": [] + "buildModeSet":[ + { + "name":"debug" + }, + { + "name":"release" + } + ] }, "modules": [ { From 493823611bca03fc06bb61881fa57f71cd93cb87 Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Tue, 26 Sep 2023 10:18:43 +0800 Subject: [PATCH 21/22] =?UTF-8?q?1.=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B72.1.0,=E6=B6=89=E5=8F=8A=E6=8E=A5=E5=8F=A3=E5=8F=98?= =?UTF-8?q?=E5=8A=A8,=E6=AC=A1=E7=89=88=E6=9C=AC=E5=8F=B7+1=202.=E6=9B=B4?= =?UTF-8?q?=E6=96=B0README.md=203.=E6=9B=B4=E6=96=B0CHANGELOG.md=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- CHANGELOG.md | 4 +++- README.md | 12 ++++++++---- imageknife/oh-package.json5 | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f3988d..af6c235 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 2.0.6 +## 2.1.0 - ArkTs语法整改: @@ -8,6 +8,8 @@ 访问ImageKnife对象需要使用ImageKnifeGlobal.getInstance().getImageKnife() +- 裁剪组件暴露PixelMapCrop组件和配置类Options, 配置类Options不再需要声明PixelMapCrop.Options中的PixelMapCrop命名空间 + - 适配DevEco Studio 版本:4.0(4.0.3.512), SDK: API10 (4.0.10.9) ## 2.0.5-rc.0 diff --git a/README.md b/README.md index 0f7f9ef..a04186d 100644 --- a/README.md +++ b/README.md @@ -373,7 +373,7 @@ ImageKnifeGlobal.getInstance().getImageKnife().setDefaultLifeCycle(ImageKnifeDra 了解了RequestOption的参数内容后,我们可以参考ImageKnifeComponent组件代码进行分析。 **从`imageKnifeExecute()`函数入口,首先我们需要构建一个RequestOption对象,`let request = new RequestOption()`, -接下来就是按需配置request对象的内容,最后使用 `globalThis.ImageKnife.call(request)`发送request执行任务即可。** +接下来就是按需配置request对象的内容,最后使用 `ImageKnifeGlobal.getInstance().getImageKnife()?.call(request)`发送request执行任务即可。** 是不是很简单,而其实最重要的内容是就是: **按需配置request对象的内容** 为了更好理解,我举例说明一下: @@ -384,7 +384,7 @@ let request = new RequestOption(); // (必传) request.load("图片url") // (可选 整个request监听回调) - .addListener((err, data) => { + .addListener({callback:(err:BusinessError|string, data:ImageKnifeData) => { // data 是ImageKnifeData对象 if(data.isPixelMap()){ // 这样就获取到了目标PixelMap @@ -393,14 +393,18 @@ request.load("图片url") return false; }) - let compSize = { + let compSize:Size = { width: this.currentWidth, height:this.currentHeight } // (必传)这里setImageViewSize函数必传组件大小,因为涉及到图片变换效果都需要适配图像源和组件大小 request.setImageViewSize(compSize) // 最后使用ImageKnife的call函数调用request即可 - globalThis.ImageKnife.call(request) + let imageKnife:ImageKnife|undefined = ImageKnifeGlobal.getInstance().getImageKnife(); + if(imageKnife != undefined){ + imageKnife.call(request) + } + ``` **其他场景,可以按需加载** diff --git a/imageknife/oh-package.json5 b/imageknife/oh-package.json5 index d621bf8..3df7f67 100644 --- a/imageknife/oh-package.json5 +++ b/imageknife/oh-package.json5 @@ -14,7 +14,7 @@ "main": "index.ets", "repository": "https://gitee.com/openharmony-tpc/ImageKnife", "type": "module", - "version": "2.0.6", + "version": "2.1.0", "dependencies": { "@ohos/disklrucache": "^2.0.0", "@ohos/svg": "^2.0.0", From 283b805f28dbda3a8ce1ccb14905d62f91eeb4cc Mon Sep 17 00:00:00 2001 From: zhoulisheng1 Date: Tue, 26 Sep 2023 16:05:21 +0800 Subject: [PATCH 22/22] =?UTF-8?q?1.XTS=E6=B5=8B=E8=AF=95=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E6=94=B9,ArkTs=E6=95=B4=E6=94=B9=E4=B9=8B=E5=90=8EXTS?= =?UTF-8?q?=E4=B9=9F=E9=9C=80=E8=A6=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng1 --- .../src/main/ets/entryability/EntryAbility.ts | 2 +- entry/src/ohosTest/ets/test/lrucache.test.ets | 48 ++++++++++++------- .../ohosTest/ets/test/requestoption.test.ets | 2 +- .../ohosTest/ets/testability/TestAbility.ets | 3 +- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/entry/src/main/ets/entryability/EntryAbility.ts b/entry/src/main/ets/entryability/EntryAbility.ts index 23b1c61..b251a00 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ts +++ b/entry/src/main/ets/entryability/EntryAbility.ts @@ -44,7 +44,7 @@ export default class EntryAbility extends UIAbility { } hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); }); - this.context.resourceManager + ImageKnife.with(this.context); // 全局配置网络加载进度条 ImageKnifeGlobal.getInstance().getImageKnife().setDefaultLifeCycle(ImageKnifeDrawFactory.createProgressLifeCycle("#10a5ff", 0.5)) diff --git a/entry/src/ohosTest/ets/test/lrucache.test.ets b/entry/src/ohosTest/ets/test/lrucache.test.ets index f70a2dc..3238954 100644 --- a/entry/src/ohosTest/ets/test/lrucache.test.ets +++ b/entry/src/ohosTest/ets/test/lrucache.test.ets @@ -39,13 +39,13 @@ export default function lruCacheTest() { }) it('testLruCacheSize',0, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let memoryCache = new LruCache(100); + let memoryCache = new LruCache(100); expect(memoryCache.size).assertEqual(0); expect(memoryCache.maxsize).assertEqual(100) }) it('testLruCachePut',1, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let memoryCache = new LruCache(5); + let memoryCache = new LruCache(5); memoryCache.put("1","1"); memoryCache.put("2","2"); memoryCache.put("3","3"); @@ -59,7 +59,7 @@ export default function lruCacheTest() { }) it('testLruCacheGet',2, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let memoryCache = new LruCache(5); + let memoryCache = new LruCache(5); memoryCache.put("1","1"); memoryCache.put("2","2"); memoryCache.put("3","3"); @@ -73,7 +73,7 @@ export default function lruCacheTest() { }) it('testLruCacheAlgorithm',3, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let memoryCache = new LruCache(5); + let memoryCache = new LruCache(5); memoryCache.put("1","1"); memoryCache.put("2","2"); memoryCache.put("3","3"); @@ -82,17 +82,24 @@ export default function lruCacheTest() { memoryCache.get("1"); memoryCache.get("2"); - - memoryCache.foreachLruCache( (value, key, index)=> { - if(index == 0){ - expect(key).assertEqual("2") - expect(value).assertEqual("2") + let count:number = 1 + let callback =(key:string,value:string)=>{ + if(count == 5){ + expect(key).assertEqual("2") + expect(value).assertEqual("2") + } + console.log('dodo count='+count+' key='+key+' value='+value) + count++; } - }) + memoryCache.foreachLruCache( (value:string, key:string, map:Map)=> { + callback(key,value) + }) + expect(memoryCache.size).assertEqual(5) + }) it('testLruCacheRemove',4, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let memoryCache = new LruCache(5); + let memoryCache = new LruCache(5); memoryCache.put("1","1"); memoryCache.put("2","2"); memoryCache.put("3","3"); @@ -104,16 +111,23 @@ export default function lruCacheTest() { memoryCache.remove("2"); - memoryCache.foreachLruCache( (value, key, index)=> { - if(index == 0){ - expect(key).assertEqual("1") - expect(value).assertEqual("1") + let count:number = 1 + let callback =(key:string,value:string)=>{ + if(count == 4){ + expect(key).assertEqual("1") + expect(value).assertEqual("1") + } + console.log('dodo count='+count+' key='+key+' value='+value) + count++; } - }) + memoryCache.foreachLruCache( (value:string, key:string, map:Map)=> { + callback(key,value) + }) + expect(memoryCache.size).assertEqual(4) }) it('testLruCacheResize',5, ()=> { // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let memoryCache = new LruCache(5); + let memoryCache = new LruCache(5); memoryCache.put("1","1"); memoryCache.put("2","2"); memoryCache.put("3","3"); diff --git a/entry/src/ohosTest/ets/test/requestoption.test.ets b/entry/src/ohosTest/ets/test/requestoption.test.ets index fc90593..fcf48f7 100644 --- a/entry/src/ohosTest/ets/test/requestoption.test.ets +++ b/entry/src/ohosTest/ets/test/requestoption.test.ets @@ -44,7 +44,7 @@ export default function RequestOptionTest() { }) it('TestConfigLoadSrc',1, ()=> { let option = new RequestOption(); - expect(option.loadSrc).assertEqual(undefined) + expect(option.loadSrc).assertEqual('') option.loadSrc = $r('app.media.icon') expect(JSON.stringify(option.loadSrc)).assertEqual(JSON.stringify($r('app.media.icon'))) }) diff --git a/entry/src/ohosTest/ets/testability/TestAbility.ets b/entry/src/ohosTest/ets/testability/TestAbility.ets index 8b92e2a..a105b2e 100644 --- a/entry/src/ohosTest/ets/testability/TestAbility.ets +++ b/entry/src/ohosTest/ets/testability/TestAbility.ets @@ -30,7 +30,8 @@ export default class TestAbility extends UIAbility { abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() hilog.info(0x0000, 'testTag', '%{public}s', 'start run testcase!!!'); Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) - (ImageKnifeGlobal.getInstance().setHapContext(this.context.createModuleContext("entry_test"))) + // 初始化xts的ImageKnife + ImageKnife.with(this.context.createModuleContext("entry_test")); } onDestroy() {