去除typevalue 的null

Signed-off-by: tsm <tianshuangming@h-partners.com>
This commit is contained in:
tsm 2024-09-27 14:34:18 +08:00
parent 066c370b20
commit f80dd101d0
3 changed files with 103 additions and 87 deletions

View File

@ -13,7 +13,7 @@
* limitations under the License. * limitations under the License.
*/ */
import { DownsampleStrategy, ImageKnifeOption, } from '@ohos/imageknife'; import { DownsampleStrategy, ImageKnifeOption, } from '@ohos/imageknife';
import { ImageKnifeComponent, BlurTransformation, } from '@ohos/libraryimageknife'; import { ImageKnifeComponent } from '@ohos/libraryimageknife';
import { image } from '@kit.ImageKit'; import { image } from '@kit.ImageKit';
import { BusinessError } from '@kit.BasicServicesKit'; import { BusinessError } from '@kit.BasicServicesKit';
import { Downsampler } from '@ohos/imageknife/src/main/ets/downsampling/Downsampler'; import { Downsampler } from '@ohos/imageknife/src/main/ets/downsampling/Downsampler';
@ -22,7 +22,7 @@ import { FileTypeUtil } from '@ohos/imageknife/src/main/ets/utils/FileTypeUtil';
@Entry @Entry
@ComponentV2 @ComponentV2
struct DownSamplePage { struct DownSamplePage {
@Local imageKnifeOption: ImageKnifeOption = new ImageKnifeOption( { @Local imageKnifeOption: ImageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.startIcon'), loadSrc: $r('app.media.startIcon'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
errorholderSrc: $r("app.media.app_icon"), errorholderSrc: $r("app.media.app_icon"),
@ -44,7 +44,7 @@ struct DownSamplePage {
updateImageKnifeOption(value: string) { updateImageKnifeOption(value: string) {
if (value === 'NONE') { if (value === 'NONE') {
this.imageKnifeOption =new ImageKnifeOption( { this.imageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.pngSample'), loadSrc: $r('app.media.pngSample'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
errorholderSrc: $r("app.media.app_icon"), errorholderSrc: $r("app.media.app_icon"),
@ -54,7 +54,7 @@ struct DownSamplePage {
this.originalPixMap($r('app.media.pngSample')) this.originalPixMap($r('app.media.pngSample'))
this.afterSamplingFunc($r('app.media.pngSample')) this.afterSamplingFunc($r('app.media.pngSample'))
} else if (value === 'AT_MOST') { } else if (value === 'AT_MOST') {
this.imageKnifeOption =new ImageKnifeOption( { this.imageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.pngSample'), loadSrc: $r('app.media.pngSample'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
errorholderSrc: $r("app.media.app_icon"), errorholderSrc: $r("app.media.app_icon"),
@ -64,7 +64,7 @@ struct DownSamplePage {
this.originalPixMap($r('app.media.pngSample')) this.originalPixMap($r('app.media.pngSample'))
this.afterSamplingFunc($r('app.media.pngSample')) this.afterSamplingFunc($r('app.media.pngSample'))
} else if (value === 'FIT_CENTER_MEMORY') { } else if (value === 'FIT_CENTER_MEMORY') {
this.imageKnifeOption =new ImageKnifeOption( { this.imageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.pngSample'), loadSrc: $r('app.media.pngSample'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
errorholderSrc: $r("app.media.app_icon"), errorholderSrc: $r("app.media.app_icon"),
@ -73,9 +73,8 @@ struct DownSamplePage {
}) })
this.originalPixMap($r('app.media.pngSample')) this.originalPixMap($r('app.media.pngSample'))
this.afterSamplingFunc($r('app.media.pngSample')) this.afterSamplingFunc($r('app.media.pngSample'))
} } else if (value === 'FIT_CENTER_QUALITY') {
else if (value ==='FIT_CENTER_QUALITY') { this.imageKnifeOption = new ImageKnifeOption({
this.imageKnifeOption =new ImageKnifeOption( {
loadSrc: $r('app.media.pngSample'), loadSrc: $r('app.media.pngSample'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
errorholderSrc: $r("app.media.app_icon"), errorholderSrc: $r("app.media.app_icon"),
@ -84,8 +83,7 @@ struct DownSamplePage {
}) })
this.originalPixMap($r('app.media.pngSample')) this.originalPixMap($r('app.media.pngSample'))
this.afterSamplingFunc($r('app.media.pngSample')) this.afterSamplingFunc($r('app.media.pngSample'))
} } else if (value === 'CENTER_INSIDE_MEMORY') {
else if (value === 'CENTER_INSIDE_MEMORY') {
this.imageKnifeOption = new ImageKnifeOption({ this.imageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.pngSample'), loadSrc: $r('app.media.pngSample'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
@ -95,7 +93,7 @@ struct DownSamplePage {
}) })
this.originalPixMap($r('app.media.pngSample')) this.originalPixMap($r('app.media.pngSample'))
this.afterSamplingFunc($r('app.media.pngSample')) this.afterSamplingFunc($r('app.media.pngSample'))
} else if (value === 'CENTER_INSIDE_QUALITY') { } else if (value === 'CENTER_INSIDE_QUALITY') {
this.imageKnifeOption = new ImageKnifeOption({ this.imageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.pngSample'), loadSrc: $r('app.media.pngSample'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
@ -105,8 +103,7 @@ struct DownSamplePage {
}) })
this.originalPixMap($r('app.media.pngSample')) this.originalPixMap($r('app.media.pngSample'))
this.afterSamplingFunc($r('app.media.pngSample')) this.afterSamplingFunc($r('app.media.pngSample'))
} } else {
else {
this.imageKnifeOption = new ImageKnifeOption({ this.imageKnifeOption = new ImageKnifeOption({
loadSrc: $r('app.media.pngSample'), loadSrc: $r('app.media.pngSample'),
placeholderSrc: $r("app.media.loading"), placeholderSrc: $r("app.media.loading"),
@ -123,7 +120,7 @@ struct DownSamplePage {
let img: Uint8Array = await getContext(this).resourceManager.getMediaContent(imgs); let img: Uint8Array = await getContext(this).resourceManager.getMediaContent(imgs);
let imageSource: image.ImageSource = image.createImageSource(img.buffer.slice(0)); let imageSource: image.ImageSource = image.createImageSource(img.buffer.slice(0));
let fileTypeUtil = new FileTypeUtil(); let fileTypeUtil = new FileTypeUtil();
let typeValue = fileTypeUtil.getFileType(img.buffer.slice(0)); let typeValue = fileTypeUtil.getFileType(img.buffer.slice(0)) as string;
let decodingOptions: image.DecodingOptions = { let decodingOptions: image.DecodingOptions = {
editable: true, editable: true,
desiredPixelFormat: 3, desiredPixelFormat: 3,

View File

@ -15,7 +15,9 @@
import { import {
CacheStrategy, CacheStrategy,
ImageKnifeRequestSource, ImageKnifeRequestSource,
ImageKnifeRequestWithSource, RequestJobRequest } from './model/ImageKnifeData'; ImageKnifeRequestWithSource,
RequestJobRequest
} from './model/ImageKnifeData';
import List from '@ohos.util.List' import List from '@ohos.util.List'
import { FileCache } from './cache/FileCache'; import { FileCache } from './cache/FileCache';
import { LogUtil } from './utils/LogUtil'; import { LogUtil } from './utils/LogUtil';
@ -42,20 +44,20 @@ class RequestData {
export class ImageKnifeLoader { export class ImageKnifeLoader {
static async parseImage(resBuf: ArrayBuffer, typeValue: string, fileKey: string, static async parseImage(resBuf: ArrayBuffer, typeValue: string, fileKey: string,
request: RequestJobRequest): Promise<RequestJobResult> { request: RequestJobRequest): Promise<RequestJobResult> {
if(request.isAnimator) { if (request.isAnimator) {
return ImageKnifeLoader.parseForAnimatorComponent(resBuf ,typeValue ,fileKey, request) return ImageKnifeLoader.parseForAnimatorComponent(resBuf, typeValue, fileKey, request)
} }
if (typeValue === 'gif' || typeValue === 'webp') { if (typeValue === 'gif' || typeValue === 'webp') {
return ImageKnifeLoader.parseAnimatorImage(resBuf ,typeValue ,fileKey , request) return ImageKnifeLoader.parseAnimatorImage(resBuf, typeValue, fileKey, request)
} else if(typeValue == "svg") { } else if (typeValue == "svg") {
return ImageKnifeLoader.parseSvgImage(resBuf ,typeValue ,fileKey , request) return ImageKnifeLoader.parseSvgImage(resBuf, typeValue, fileKey, request)
} }
return ImageKnifeLoader.parseNormalImage(resBuf, typeValue, fileKey, request) return ImageKnifeLoader.parseNormalImage(resBuf, typeValue, fileKey, request)
} }
static makeEmptyResult(error: string): RequestJobResult{ static makeEmptyResult(error: string): RequestJobResult {
return { return {
pixelMap: undefined, pixelMap: undefined,
bufferSize: 0, bufferSize: 0,
@ -64,23 +66,25 @@ export class ImageKnifeLoader {
} }
} }
static async parseNormalImage(resBuf: ArrayBuffer, typeValue: string, fileKey: string, request: RequestJobRequest):Promise<RequestJobResult> { static async parseNormalImage(resBuf: ArrayBuffer, typeValue: string, fileKey: string,
request: RequestJobRequest): Promise<RequestJobResult> {
let resPixelmap: PixelMap | undefined = undefined let resPixelmap: PixelMap | undefined = undefined
let decodingOptions: image.DecodingOptions = { let decodingOptions: image.DecodingOptions = {
editable: request.requestSource === ImageKnifeRequestSource.SRC && request.transformation !== undefined ? true : false, editable: request.requestSource === ImageKnifeRequestSource.SRC && request.transformation !== undefined ? true :
false,
} }
let imageSource: image.ImageSource = image.createImageSource(resBuf) let imageSource: image.ImageSource = image.createImageSource(resBuf)
if (imageSource === undefined){ if (imageSource === undefined) {
return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed") return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed")
} }
let size = (await imageSource.getImageInfo()).size let size = (await imageSource.getImageInfo()).size
try{ try {
if ((request.downsampType !== DownsampleStrategy.NONE) && if ((request.downsampType !== DownsampleStrategy.NONE) &&
request.requestSource == ImageKnifeRequestSource.SRC ) { request.requestSource == ImageKnifeRequestSource.SRC) {
decodingOptions =await ImageKnifeLoader.downsamplerReqSize(typeValue,request,size,ImageKnifeRequestSource.SRC) decodingOptions = ImageKnifeLoader.downsamplerReqSize(typeValue, request, size, ImageKnifeRequestSource.SRC)
} }
}catch(err){ } catch (err) {
return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed") return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed")
} }
@ -97,15 +101,16 @@ export class ImageKnifeLoader {
pixelMap: resPixelmap, pixelMap: resPixelmap,
bufferSize: resBuf.byteLength, bufferSize: resBuf.byteLength,
fileKey: fileKey, fileKey: fileKey,
size:size, size: size,
type:typeValue type: typeValue
}; };
} }
static async parseSvgImage(resBuf: ArrayBuffer, typeValue: string, fileKey: string, static async parseSvgImage(resBuf: ArrayBuffer, typeValue: string, fileKey: string,
request: RequestJobRequest): Promise<RequestJobResult> { request: RequestJobRequest): Promise<RequestJobResult> {
let resPixelmap: PixelMap | undefined = undefined let resPixelmap: PixelMap | undefined = undefined
let imageSource: image.ImageSource = image.createImageSource(resBuf) let imageSource: image.ImageSource = image.createImageSource(resBuf)
if (imageSource === undefined){ if (imageSource === undefined) {
return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed") return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed")
} }
@ -121,12 +126,12 @@ export class ImageKnifeLoader {
editable: true, editable: true,
desiredSize: defaultSize desiredSize: defaultSize
}; };
try{ try {
if ((request.downsampType !== DownsampleStrategy.NONE) && if ((request.downsampType !== DownsampleStrategy.NONE) &&
request.requestSource == ImageKnifeRequestSource.SRC ) { request.requestSource == ImageKnifeRequestSource.SRC) {
opts =await ImageKnifeLoader.downsamplerReqSize(typeValue,request,size) opts = ImageKnifeLoader.downsamplerReqSize(typeValue, request, size)
} }
}catch(err){ } catch (err) {
return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed") return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed")
} }
await imageSource.createPixelMap(opts) await imageSource.createPixelMap(opts)
@ -142,13 +147,14 @@ export class ImageKnifeLoader {
pixelMap: resPixelmap, pixelMap: resPixelmap,
bufferSize: resBuf.byteLength, bufferSize: resBuf.byteLength,
fileKey: fileKey, fileKey: fileKey,
type:typeValue type: typeValue
}; };
} }
static async parseAnimatorImage(resBuf: ArrayBuffer, typeValue: string, static async parseAnimatorImage(resBuf: ArrayBuffer, typeValue: string,
fileKey: string,request: RequestJobRequest): Promise<RequestJobResult> { fileKey: string, request: RequestJobRequest): Promise<RequestJobResult> {
let imageSource: image.ImageSource = image.createImageSource(resBuf) let imageSource: image.ImageSource = image.createImageSource(resBuf)
if (imageSource === undefined){ if (imageSource === undefined) {
return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed") return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed")
} }
@ -156,28 +162,32 @@ export class ImageKnifeLoader {
let size = (await imageSource.getImageInfo()).size let size = (await imageSource.getImageInfo()).size
imageSource.release() imageSource.release()
if(frameCount == undefined || frameCount == 1) { if (frameCount == undefined || frameCount == 1) {
} else { } else {
let base64str = "data:image/" + typeValue + ";base64," + new util.Base64Helper().encodeToStringSync(new Uint8Array(resBuf)) let base64str =
"data:image/" + typeValue + ";base64," + new util.Base64Helper().encodeToStringSync(new Uint8Array(resBuf))
return { return {
pixelMap: base64str, pixelMap: base64str,
bufferSize: resBuf.byteLength, bufferSize: resBuf.byteLength,
fileKey: fileKey, fileKey: fileKey,
size:size, size: size,
type:typeValue type: typeValue
}; };
} }
return ImageKnifeLoader.parseNormalImage(resBuf, typeValue, fileKey, request) return ImageKnifeLoader.parseNormalImage(resBuf, typeValue, fileKey, request)
} }
// 为AnimatorComponent解析动图 // 为AnimatorComponent解析动图
static async parseForAnimatorComponent(resBuf: ArrayBuffer, typeValue: string, fileKey: string,request: RequestJobRequest): Promise<RequestJobResult> { static async parseForAnimatorComponent(resBuf: ArrayBuffer, typeValue: string, fileKey: string,
request: RequestJobRequest): Promise<RequestJobResult> {
if (typeValue === 'gif' || typeValue === 'webp') { if (typeValue === 'gif' || typeValue === 'webp') {
let imageSource: image.ImageSource = image.createImageSource(resBuf); let imageSource: image.ImageSource = image.createImageSource(resBuf);
if (imageSource === undefined){ if (imageSource === undefined) {
return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed") return ImageKnifeLoader.makeEmptyResult("image.createImageSource failed")
} }
let decodingOptions: image.DecodingOptions = { let decodingOptions: image.DecodingOptions = {
editable: request.requestSource === ImageKnifeRequestSource.SRC && request.transformation !== undefined ? true : false, editable: request.requestSource === ImageKnifeRequestSource.SRC && request.transformation !== undefined ? true :
false,
} }
let pixelMapList: Array<PixelMap> = [] let pixelMapList: Array<PixelMap> = []
let delayList: Array<number> = [] let delayList: Array<number> = []
@ -214,13 +224,15 @@ export class ImageKnifeLoader {
} }
// 获取图片资源 // 获取图片资源
static async getImageArrayBuffer(request: RequestJobRequest, requestList: List<ImageKnifeRequestWithSource> | undefined,fileKey:string): Promise<ArrayBuffer> { static async getImageArrayBuffer(request: RequestJobRequest,
requestList: List<ImageKnifeRequestWithSource> | undefined, fileKey: string): Promise<ArrayBuffer> {
let resBuf: ArrayBuffer | undefined let resBuf: ArrayBuffer | undefined
// 判断自定义下载 // 判断自定义下载
if (request.customGetImage !== undefined && request.requestSource == ImageKnifeRequestSource.SRC && typeof request.src == "string") { if (request.customGetImage !== undefined && request.requestSource == ImageKnifeRequestSource.SRC &&
typeof request.src == "string") {
// 先从文件缓存获取 // 先从文件缓存获取
resBuf = FileCache.getFileCacheByFile(request.context, fileKey , request.fileCacheFolder) resBuf = FileCache.getFileCacheByFile(request.context, fileKey, request.fileCacheFolder)
if (resBuf === undefined) { if (resBuf === undefined) {
LogUtil.log("start customGetImage src=" + request.src) LogUtil.log("start customGetImage src=" + request.src)
try { try {
@ -239,16 +251,14 @@ export class ImageKnifeLoader {
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.end:" + request.src) LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.end:" + request.src)
} }
} }
} } else {
else {
if (typeof request.src === 'string') { if (typeof request.src === 'string') {
if (request.src.indexOf("http://") == 0 || request.src.indexOf("https://") == 0) { //从网络下载 if (request.src.indexOf("http://") == 0 || request.src.indexOf("https://") == 0) { //从网络下载
// 先从文件缓存获取 // 先从文件缓存获取
resBuf = FileCache.getFileCacheByFile(request.context, fileKey , request.fileCacheFolder) resBuf = FileCache.getFileCacheByFile(request.context, fileKey, request.fileCacheFolder)
if (resBuf !== undefined){ if (resBuf !== undefined) {
LogUtil.log("success get image from filecache for key = " + fileKey + " src = " + request.src) LogUtil.log("success get image from filecache for key = " + fileKey + " src = " + request.src)
} } else if (request.onlyRetrieveFromCache != true) {
else if (request.onlyRetrieveFromCache != true) {
LogUtil.log("HttpDownloadClient.start:" + request.src) LogUtil.log("HttpDownloadClient.start:" + request.src)
let httpRequest = http.createHttp(); let httpRequest = http.createHttp();
let progress: number = 0 let progress: number = 0
@ -277,10 +287,11 @@ export class ImageKnifeLoader {
if (requestList === undefined) { if (requestList === undefined) {
// 子线程 // 子线程
emitter.emit(Constants.PROGRESS_EMITTER + request.memoryKey, { data: { "value": progress } }) emitter.emit(Constants.PROGRESS_EMITTER + request.memoryKey, { data: { "value": progress } })
}else { } else {
// 主线程请求 // 主线程请求
requestList!.forEach((requestWithSource: ImageKnifeRequestWithSource) => { requestList!.forEach((requestWithSource: ImageKnifeRequestWithSource) => {
if (requestWithSource.request.imageKnifeOption.progressListener !== undefined && requestWithSource.source === ImageKnifeRequestSource.SRC) { if (requestWithSource.request.imageKnifeOption.progressListener !== undefined &&
requestWithSource.source === ImageKnifeRequestSource.SRC) {
requestWithSource.request.imageKnifeOption.progressListener(progress) requestWithSource.request.imageKnifeOption.progressListener(progress)
} }
}) })
@ -311,29 +322,31 @@ export class ImageKnifeLoader {
LogUtil.log("HttpDownloadClient.end:" + request.src) LogUtil.log("HttpDownloadClient.end:" + request.src)
// 保存文件缓存 // 保存文件缓存
if (resBuf !== undefined && request.writeCacheStrategy !== CacheStrategy.Memory) { if (resBuf !== undefined && request.writeCacheStrategy !== CacheStrategy.Memory) {
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.start:"+request.src) LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.start:" + request.src)
FileCache.saveFileCacheOnlyFile(request.context, fileKey, resBuf , request.fileCacheFolder) FileCache.saveFileCacheOnlyFile(request.context, fileKey, resBuf, request.fileCacheFolder)
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.end:"+request.src) LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.end:" + request.src)
} }
} } else {
else {
throw new Error('onlyRetrieveFromCache,do not fetch image src = ' + request.src) throw new Error('onlyRetrieveFromCache,do not fetch image src = ' + request.src)
} }
} else if (request.src.startsWith('datashare://') || request.src.startsWith('file://')) { } else if (request.src.startsWith('datashare://') || request.src.startsWith('file://')) {
await fs.open(request.src, fs.OpenMode.READ_ONLY).then(async (file) => { await fs.open(request.src, fs.OpenMode.READ_ONLY).then(async (file) => {
await fs.stat(file.fd).then(async (stat) =>{ await fs.stat(file.fd).then(async (stat) => {
let buf = new ArrayBuffer(stat.size); let buf = new ArrayBuffer(stat.size);
await fs.read(file.fd, buf).then((readLen) => { await fs.read(file.fd, buf).then((readLen) => {
resBuf = buf; resBuf = buf;
fs.closeSync(file.fd); fs.closeSync(file.fd);
}).catch((err:BusinessError) => { }).catch((err: BusinessError) => {
throw new Error('LoadDataShareFileClient fs.read err happened uri=' + request.src + " err.msg=" + err?.message + " err.code=" + err?.code) throw new Error('LoadDataShareFileClient fs.read err happened uri=' + request.src + " err.msg=" +
err?.message + " err.code=" + err?.code)
}) })
}).catch((err:BusinessError) => { }).catch((err: BusinessError) => {
throw new Error('LoadDataShareFileClient fs.stat err happened uri=' + request.src + " err.msg=" + err?.message + " err.code=" + err?.code) throw new Error('LoadDataShareFileClient fs.stat err happened uri=' + request.src + " err.msg=" +
err?.message + " err.code=" + err?.code)
}) })
}).catch((err:BusinessError) => { }).catch((err: BusinessError) => {
throw new Error('LoadDataShareFileClient fs.open err happened uri=' + request.src + " err.msg=" + err?.message + " err.code=" + err?.code) throw new Error('LoadDataShareFileClient fs.open err happened uri=' + request.src + " err.msg=" +
err?.message + " err.code=" + err?.code)
}) })
} else { //从本地文件获取 } else { //从本地文件获取
try { try {
@ -350,15 +363,16 @@ export class ImageKnifeLoader {
} }
} else if (typeof request.src == "number") { //从资源文件获取 } else if (typeof request.src == "number") { //从资源文件获取
let manager = request.context.createModuleContext(request.moduleName).resourceManager let manager = request.context.createModuleContext(request.moduleName).resourceManager
if (resBuf == undefined && request.onlyRetrieveFromCache != true && request.requestSource == ImageKnifeRequestSource.SRC) { if (resBuf == undefined && request.onlyRetrieveFromCache != true &&
if(request.src == -1) { request.requestSource == ImageKnifeRequestSource.SRC) {
if (request.src == -1) {
let resName = request.resName as string let resName = request.resName as string
resBuf = (await manager.getMediaByName(resName.substring(10))).buffer as ArrayBuffer resBuf = (await manager.getMediaByName(resName.substring(10))).buffer as ArrayBuffer
} else { } else {
resBuf = manager.getMediaContentSync(request.src).buffer as ArrayBuffer resBuf = manager.getMediaContentSync(request.src).buffer as ArrayBuffer
} }
} else if (resBuf == undefined && request.requestSource != ImageKnifeRequestSource.SRC) { } else if (resBuf == undefined && request.requestSource != ImageKnifeRequestSource.SRC) {
if(request.src == -1) { if (request.src == -1) {
let resName = request.resName as string let resName = request.resName as string
resBuf = (await manager.getMediaByName(resName.substring(10))).buffer as ArrayBuffer resBuf = (await manager.getMediaByName(resName.substring(10))).buffer as ArrayBuffer
} else { } else {
@ -368,30 +382,35 @@ export class ImageKnifeLoader {
} }
} }
if (resBuf === undefined){ if (resBuf === undefined) {
throw new Error('getImageArrayBuffer undefined') throw new Error('getImageArrayBuffer undefined')
} }
return resBuf return resBuf
} }
static async downsamplerReqSize(typeValue:string,request:RequestJobRequest ,size:Size,SRC?:ImageKnifeRequestSource): Promise<image.DecodingOptions>{
let reqSize = new Downsampler().calculateScaling(typeValue, size.width, size.height, request.targetWidth, request.targetHeight, request.downsampType) static downsamplerReqSize(typeValue: string, request: RequestJobRequest, size: Size,
if(typeValue=="svg") { SRC?: ImageKnifeRequestSource) {
let reqSize =
new Downsampler().calculateScaling(typeValue, size.width, size.height, request.targetWidth, request.targetHeight,
request.downsampType)
if (typeValue == "svg") {
return ({ return ({
editable: true, editable: true,
desiredSize: ({ desiredSize: ({
height: vp2px(reqSize.targetHeight), height: vp2px(reqSize.targetHeight),
width: vp2px(reqSize.targetWidth) width: vp2px(reqSize.targetWidth)
} as Size) } as Size)
} as image.DecodingOptions )
}else { } as image.DecodingOptions)
return( { } else {
editable: request.requestSource ===SRC && request.transformation !== undefined ? true : false, return ({
desiredSize: ({ editable: request.requestSource === SRC && request.transformation !== undefined ? true : false,
width: reqSize.targetWidth, desiredSize: ({
height: reqSize.targetHeight width: reqSize.targetWidth,
}as Size) height: reqSize.targetHeight
}as image.DecodingOptions) } as Size)
} } as image.DecodingOptions)
}
} }
} }

View File

@ -30,7 +30,7 @@ export interface calculateScaleType {
export class Downsampler { export class Downsampler {
calculateScaling( calculateScaling(
typeValue: string |null, typeValue: string,
sourceWidth: number, //原始宽高 sourceWidth: number, //原始宽高
sourceHeight: number, //原始宽高 sourceHeight: number, //原始宽高
requestWidth: number, //请求宽高 requestWidth: number, //请求宽高