parent
851d33a5dc
commit
02fae0e740
|
@ -327,9 +327,9 @@ Clear the component content in the **aboutToRecycle** lifecycle and trigger imag
|
||||||
| AT_MOST | 请求尺寸大于实际尺寸不进行放大 |
|
| AT_MOST | 请求尺寸大于实际尺寸不进行放大 |
|
||||||
| FIT_CENTER_MEMORY | 两边自适应内存优先 |
|
| FIT_CENTER_MEMORY | 两边自适应内存优先 |
|
||||||
| FIT_CENTER_QUALITY | 两边自适应质量优先 |
|
| FIT_CENTER_QUALITY | 两边自适应质量优先 |
|
||||||
| CENTER_INSIDE_MEMORY | 宽高缩放比最大的比例,进行缩放适配内存优先 |
|
| CENTER_OUTSIDE_MEMORY | 宽高缩放比最大的比例,进行缩放适配内存优先 |
|
||||||
| CENTER_INSIDE_QUALITY | 宽高缩放比最大的比例,进行缩放适配质量优先 |
|
| CENTER_OUTSIDE_QUALITY | 宽高缩放比最大的比例,进行缩放适配质量优先 |
|
||||||
| CENTER_OUTSIDE | 根据宽高的最小的比例,进行适配 |
|
| AT_LEAST | 根据宽高的最小的比例,进行适配 |
|
||||||
### ImageKnife
|
### ImageKnife
|
||||||
|
|
||||||
| Parameter | Type | Description |
|
| Parameter | Type | Description |
|
||||||
|
|
|
@ -32,13 +32,16 @@ struct DownSamplePage {
|
||||||
@Local beforeSampling: number = 0
|
@Local beforeSampling: number = 0
|
||||||
@Local afterSampling: number = 0
|
@Local afterSampling: number = 0
|
||||||
@Local SamplingList: SamplingType[] = [
|
@Local SamplingList: SamplingType[] = [
|
||||||
new SamplingType(0, "NONE"),
|
|
||||||
|
new SamplingType(7, "AT_LEAST"),
|
||||||
new SamplingType(1, "AT_MOST"),
|
new SamplingType(1, "AT_MOST"),
|
||||||
|
|
||||||
new SamplingType(2, "FIT_CENTER_MEMORY"),
|
new SamplingType(2, "FIT_CENTER_MEMORY"),
|
||||||
new SamplingType(4, "FIT_CENTER_QUALITY"),
|
new SamplingType(4, "FIT_CENTER_QUALITY"),
|
||||||
new SamplingType(5, "CENTER_INSIDE_MEMORY"),
|
new SamplingType(5, "CENTER_OUTSIDE_MEMORY"),
|
||||||
new SamplingType(6, "CENTER_INSIDE_QUALITY"),
|
new SamplingType(6, "CENTER_OUTSIDE_QUALITY"),
|
||||||
new SamplingType(7, "CENTER_OUTSIDE"),
|
new SamplingType(0, "NONE"),
|
||||||
|
|
||||||
]
|
]
|
||||||
@Local checked: boolean = false
|
@Local checked: boolean = false
|
||||||
|
|
||||||
|
@ -83,23 +86,23 @@ 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_OUTSIDE_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"),
|
||||||
objectFit: ImageFit.Contain,
|
objectFit: ImageFit.Contain,
|
||||||
downsampleOf: DownsampleStrategy.CENTER_INSIDE_MEMORY
|
downsampleOf: DownsampleStrategy.CENTER_OUTSIDE_MEMORY
|
||||||
})
|
})
|
||||||
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_OUTSIDE_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"),
|
||||||
objectFit: ImageFit.Contain,
|
objectFit: ImageFit.Contain,
|
||||||
downsampleOf: DownsampleStrategy.CENTER_INSIDE_QUALITY
|
downsampleOf: DownsampleStrategy.CENTER_OUTSIDE_QUALITY
|
||||||
})
|
})
|
||||||
this.originalPixMap($r('app.media.pngSample'))
|
this.originalPixMap($r('app.media.pngSample'))
|
||||||
this.afterSamplingFunc($r('app.media.pngSample'))
|
this.afterSamplingFunc($r('app.media.pngSample'))
|
||||||
|
@ -109,7 +112,7 @@ struct DownSamplePage {
|
||||||
placeholderSrc: $r("app.media.loading"),
|
placeholderSrc: $r("app.media.loading"),
|
||||||
errorholderSrc: $r("app.media.app_icon"),
|
errorholderSrc: $r("app.media.app_icon"),
|
||||||
objectFit: ImageFit.Contain,
|
objectFit: ImageFit.Contain,
|
||||||
downsampleOf: DownsampleStrategy.CENTER_OUTSIDE
|
downsampleOf: DownsampleStrategy.AT_LEAST
|
||||||
})
|
})
|
||||||
this.originalPixMap($r('app.media.pngSample'))
|
this.originalPixMap($r('app.media.pngSample'))
|
||||||
this.afterSamplingFunc($r('app.media.pngSample'))
|
this.afterSamplingFunc($r('app.media.pngSample'))
|
||||||
|
|
|
@ -60,17 +60,17 @@ export default function SamplingTest() {
|
||||||
let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024)
|
let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024)
|
||||||
expect(req).assertEqual(true);
|
expect(req).assertEqual(true);
|
||||||
})
|
})
|
||||||
it('CENTER_INSIDE', 3, () => {
|
it('CENTER_OUTSIDE', 3, () => {
|
||||||
let reqSize: calculateScaleType =
|
let reqSize: calculateScaleType =
|
||||||
new Downsampler().calculateScaling('jpg', 1024, 1024, 200,
|
new Downsampler().calculateScaling('jpg', 1024, 1024, 200,
|
||||||
200, DownsampleStrategy.CENTER_INSIDE_MEMORY)
|
200, DownsampleStrategy.CENTER_OUTSIDE_MEMORY)
|
||||||
let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024)
|
let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024)
|
||||||
expect(req).assertEqual(true);
|
expect(req).assertEqual(true);
|
||||||
})
|
})
|
||||||
it('CENTER_OUTSIDE', 4, () => {
|
it('AT_LEAST', 4, () => {
|
||||||
let reqSize: calculateScaleType =
|
let reqSize: calculateScaleType =
|
||||||
new Downsampler().calculateScaling('jpg', 1024, 1024, 200,
|
new Downsampler().calculateScaling('jpg', 1024, 1024, 200,
|
||||||
200, DownsampleStrategy.CENTER_OUTSIDE)
|
200, DownsampleStrategy.AT_LEAST)
|
||||||
let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024)
|
let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024)
|
||||||
expect(req).assertEqual(true);
|
expect(req).assertEqual(true);
|
||||||
})
|
})
|
||||||
|
|
|
@ -78,7 +78,7 @@ export class ImageKnifeLoader {
|
||||||
try {
|
try {
|
||||||
if ((request.downsampType !== DownsampleStrategy.NONE) &&
|
if ((request.downsampType !== DownsampleStrategy.NONE) &&
|
||||||
request.requestSource == ImageKnifeRequestSource.SRC) {
|
request.requestSource == ImageKnifeRequestSource.SRC) {
|
||||||
decodingOptions = ImageKnifeLoader.downsamplerReqSize(typeValue, request, size, ImageKnifeRequestSource.SRC)
|
decodingOptions = ImageKnifeLoader.getDownsamplerDecodingOptions(typeValue, request, size, ImageKnifeRequestSource.SRC)
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return ImageKnifeLoader.makeEmptyResult(err)
|
return ImageKnifeLoader.makeEmptyResult(err)
|
||||||
|
@ -124,7 +124,7 @@ export class ImageKnifeLoader {
|
||||||
try {
|
try {
|
||||||
if ((request.downsampType !== DownsampleStrategy.NONE) &&
|
if ((request.downsampType !== DownsampleStrategy.NONE) &&
|
||||||
request.requestSource == ImageKnifeRequestSource.SRC) {
|
request.requestSource == ImageKnifeRequestSource.SRC) {
|
||||||
opts = ImageKnifeLoader.downsamplerReqSize(typeValue, request, size)
|
opts = ImageKnifeLoader.getDownsamplerDecodingOptions(typeValue, request, size)
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
return ImageKnifeLoader.makeEmptyResult(err)
|
return ImageKnifeLoader.makeEmptyResult(err)
|
||||||
|
@ -374,7 +374,7 @@ export class ImageKnifeLoader {
|
||||||
return resBuf
|
return resBuf
|
||||||
}
|
}
|
||||||
|
|
||||||
static downsamplerReqSize(typeValue: string, request: RequestJobRequest, size: Size,
|
static getDownsamplerDecodingOptions(typeValue: string, request: RequestJobRequest, size: Size,
|
||||||
SRC?: ImageKnifeRequestSource):image.DecodingOptions {
|
SRC?: ImageKnifeRequestSource):image.DecodingOptions {
|
||||||
let reqSize =
|
let reqSize =
|
||||||
new Downsampler().calculateScaling(typeValue, size.width, size.height, request.targetWidth, request.targetHeight,
|
new Downsampler().calculateScaling(typeValue, size.width, size.height, request.targetWidth, request.targetHeight,
|
||||||
|
|
|
@ -126,7 +126,7 @@ export class CenterInside implements BaseDownsampling {
|
||||||
return SampleSizeRounding.QUALITY
|
return SampleSizeRounding.QUALITY
|
||||||
}
|
}
|
||||||
//否则,使用 FIL_CENTER 的 SampleSizeRounding 值
|
//否则,使用 FIL_CENTER 的 SampleSizeRounding 值
|
||||||
return downsampType === DownsampleStrategy.CENTER_INSIDE_MEMORY?SampleSizeRounding.MEMORY:SampleSizeRounding.QUALITY
|
return downsampType === DownsampleStrategy.CENTER_OUTSIDE_MEMORY?SampleSizeRounding.MEMORY:SampleSizeRounding.QUALITY
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,11 +138,11 @@ export enum DownsampleStrategy {
|
||||||
//两边自适应质量优先
|
//两边自适应质量优先
|
||||||
FIT_CENTER_QUALITY,
|
FIT_CENTER_QUALITY,
|
||||||
//按照宽高比的最大比进行适配内存优先
|
//按照宽高比的最大比进行适配内存优先
|
||||||
CENTER_INSIDE_MEMORY,
|
CENTER_OUTSIDE_MEMORY,
|
||||||
//按照宽高比的最大比进行适配质量优先
|
//按照宽高比的最大比进行适配质量优先
|
||||||
CENTER_INSIDE_QUALITY,
|
CENTER_OUTSIDE_QUALITY,
|
||||||
//宽高进行等比缩放宽高里面最小的比例先放进去,然后再根据原图的缩放比去适配
|
//宽高进行等比缩放宽高里面最小的比例先放进去,然后再根据原图的缩放比去适配
|
||||||
CENTER_OUTSIDE,
|
AT_LEAST,
|
||||||
//不进行降采样
|
//不进行降采样
|
||||||
NONE,
|
NONE,
|
||||||
}
|
}
|
|
@ -61,10 +61,10 @@ export class Downsampler {
|
||||||
return new FitCenter();
|
return new FitCenter();
|
||||||
case DownsampleStrategy.AT_MOST:
|
case DownsampleStrategy.AT_MOST:
|
||||||
return new AtMost();
|
return new AtMost();
|
||||||
case DownsampleStrategy.CENTER_INSIDE_MEMORY:
|
case DownsampleStrategy.CENTER_OUTSIDE_MEMORY:
|
||||||
case DownsampleStrategy.CENTER_INSIDE_QUALITY:
|
case DownsampleStrategy.CENTER_OUTSIDE_QUALITY:
|
||||||
return new CenterInside();
|
return new CenterInside();
|
||||||
case DownsampleStrategy.CENTER_OUTSIDE:
|
case DownsampleStrategy.AT_LEAST:
|
||||||
return new CenterOutside();
|
return new CenterOutside();
|
||||||
default:
|
default:
|
||||||
throw new Error('Unsupported downsampling strategy');
|
throw new Error('Unsupported downsampling strategy');
|
||||||
|
|
Loading…
Reference in New Issue