forked from floraachy/ImageKnife
1.ArkTs整改13 整改imageknife->util
Signed-off-by: zhoulisheng1 <zhoulisheng1@huawei.com>
This commit is contained in:
parent
ca0e3fe968
commit
9fedc69e8e
|
@ -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<PixelMap>) {
|
||||
|
@ -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<PixelEntry> = new Array()
|
||||
var pixSrc: Array<number> = new Array()
|
||||
var pixNvt: Array<number> = 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<PixelEntry> = new Array()
|
||||
let pixSrc: Array<number> = new Array()
|
||||
let pixNvt: Array<number> = new Array()
|
||||
|
||||
let bufferData = new ArrayBuffer(p.getPixelBytesNumber());
|
||||
await p.readPixelsToBuffer(bufferData);
|
||||
|
@ -97,10 +101,32 @@ export namespace CalculatePixelUtils {
|
|||
}
|
||||
}
|
||||
|
||||
var gaussGray = (psrc: Array<number>, horz: number, vert: number,
|
||||
let gaussGray = (psrc: Array<number>, 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<number>;
|
||||
let i, j, t, k, row, col, terms, std_dev, sp_p_idx, sp_m_idx, vp_idx, vm_idx: number;
|
||||
let dst: Array<number>;
|
||||
let src: Array<number>;
|
||||
let n_p: Array<number>;
|
||||
let n_m: Array<number>;
|
||||
let d_p: Array<number>;
|
||||
let d_m: Array<number>;
|
||||
let bd_p: Array<number>;
|
||||
let bd_m: Array<number>;
|
||||
let val_p: Array<number>;
|
||||
let val_m: Array<number>;
|
||||
let initial_p: Array<number>;
|
||||
let initial_m: Array<number>;
|
||||
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<number>, n_m: Array<number>, d_p: Array<number>,
|
||||
let findConstants = (n_p: Array<number>, n_m: Array<number>, d_p: Array<number>,
|
||||
d_m: Array<number>, bd_p: Array<number>
|
||||
, bd_m: Array<number>, 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<number>, src2: Array<number>,
|
||||
let transferGaussPixels = (src1: Array<number>, src2: Array<number>,
|
||||
dest: Array<number>, 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<number> {
|
||||
let array = new Array<number>();
|
||||
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<PixelMap>) {
|
||||
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);
|
||||
}
|
||||
})
|
||||
|
|
|
@ -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<string>) {
|
||||
|
||||
var reColor = 'sys.color.' + c;
|
||||
let reColor = 'sys.color.' + c;
|
||||
((ImageKnifeGlobal.getInstance().getHapContext() as Record<string,Object>).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)
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
*/
|
||||
import {LogUtil} from '../../imageknife/utils/LogUtil'
|
||||
export class FileTypeUtil {
|
||||
private map = new Map();
|
||||
private READ_MIN_LENGTH;
|
||||
private map:Map<string,string> = new Map<string,string>();
|
||||
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<Object[]> = 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<Object[]> = 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){
|
||||
|
|
|
@ -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<number>())
|
||||
}
|
||||
}
|
||||
|
@ -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<number>{
|
||||
public getColumnsArray(r: number): Array<number>|null{
|
||||
if (r < 0 || r >= this.rows) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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<PixelMap>) {
|
||||
static async mask(bitmap: PixelMap, maskBitmap: PixelMap, func?: AsyncTransform<PixelMap>) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -31,9 +31,9 @@ export class ParseImageUtil implements IParseImage<PixelMap> {
|
|||
}
|
||||
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 = {
|
||||
|
|
|
@ -37,7 +37,7 @@ export namespace pixelUtils {
|
|||
let targetWidth:number = size.width;
|
||||
let targetHeight:number = size.height;
|
||||
|
||||
var pixEntry: Array<PixelEntry> = new Array()
|
||||
let pixEntry: Array<PixelEntry> = new Array()
|
||||
let inPixels: Array<Array<number>> = 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<PixelMap>) {
|
||||
export async function pixelGPU(bitmap: PixelMap, pixel: number, func?: AsyncTransform<PixelMap>) {
|
||||
|
||||
let imageInfo = await bitmap.getImageInfo();
|
||||
let imageInfo:image.ImageInfo = await bitmap.getImageInfo();
|
||||
let size:Size = {
|
||||
width: imageInfo.size.width,
|
||||
height: imageInfo.size.height
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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<PixelMap[]> {
|
||||
let promises = []
|
||||
let filterCriteria = (item) => {
|
||||
private createPixelMapAll(frames:GIFFrame[]): Promise<PixelMap[]> {
|
||||
let promises:Promise<PixelMap>[] = 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<void,undefined>((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<PixelMap>(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<string,Object> = 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;
|
||||
}
|
||||
}
|
|
@ -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<PixelMap>
|
||||
parseSvg:(imageinfo: ArrayBuffer,size?:Size)=> Promise<PixelMap>
|
||||
}
|
Loading…
Reference in New Issue