Compare commits

..

1 Commits

Author SHA1 Message Date
田双明 de5ee734a9
Pre Merge pull request !401 from 田双明/master 2024-10-10 12:29:06 +00:00
6 changed files with 26 additions and 29 deletions

View File

@ -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_OUTSIDE_MEMORY | 宽高缩放比最大的比例,进行缩放适配内存优先 | | CENTER_INSIDE_MEMORY | 宽高缩放比最大的比例,进行缩放适配内存优先 |
| CENTER_OUTSIDE_QUALITY | 宽高缩放比最大的比例,进行缩放适配质量优先 | | CENTER_INSIDE_QUALITY | 宽高缩放比最大的比例,进行缩放适配质量优先 |
| AT_LEAST | 根据宽高的最小的比例,进行适配 | | CENTER_OUTSIDE | 根据宽高的最小的比例,进行适配 |
### ImageKnife ### ImageKnife
| Parameter | Type | Description | | Parameter | Type | Description |

View File

@ -32,16 +32,13 @@ 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_OUTSIDE_MEMORY"), new SamplingType(5, "CENTER_INSIDE_MEMORY"),
new SamplingType(6, "CENTER_OUTSIDE_QUALITY"), new SamplingType(6, "CENTER_INSIDE_QUALITY"),
new SamplingType(0, "NONE"), new SamplingType(7, "CENTER_OUTSIDE"),
] ]
@Local checked: boolean = false @Local checked: boolean = false
@ -86,23 +83,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_OUTSIDE_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"),
errorholderSrc: $r("app.media.app_icon"), errorholderSrc: $r("app.media.app_icon"),
objectFit: ImageFit.Contain, objectFit: ImageFit.Contain,
downsampleOf: DownsampleStrategy.CENTER_OUTSIDE_MEMORY downsampleOf: DownsampleStrategy.CENTER_INSIDE_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_OUTSIDE_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"),
errorholderSrc: $r("app.media.app_icon"), errorholderSrc: $r("app.media.app_icon"),
objectFit: ImageFit.Contain, objectFit: ImageFit.Contain,
downsampleOf: DownsampleStrategy.CENTER_OUTSIDE_QUALITY downsampleOf: DownsampleStrategy.CENTER_INSIDE_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'))
@ -112,7 +109,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.AT_LEAST downsampleOf: DownsampleStrategy.CENTER_OUTSIDE
}) })
this.originalPixMap($r('app.media.pngSample')) this.originalPixMap($r('app.media.pngSample'))
this.afterSamplingFunc($r('app.media.pngSample')) this.afterSamplingFunc($r('app.media.pngSample'))

View File

@ -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_OUTSIDE', 3, () => { it('CENTER_INSIDE', 3, () => {
let reqSize: calculateScaleType = let reqSize: calculateScaleType =
new Downsampler().calculateScaling('jpg', 1024, 1024, 200, new Downsampler().calculateScaling('jpg', 1024, 1024, 200,
200, DownsampleStrategy.CENTER_OUTSIDE_MEMORY) 200, DownsampleStrategy.CENTER_INSIDE_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('AT_LEAST', 4, () => { it('CENTER_OUTSIDE', 4, () => {
let reqSize: calculateScaleType = let reqSize: calculateScaleType =
new Downsampler().calculateScaling('jpg', 1024, 1024, 200, new Downsampler().calculateScaling('jpg', 1024, 1024, 200,
200, DownsampleStrategy.AT_LEAST) 200, DownsampleStrategy.CENTER_OUTSIDE)
let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024) let req = (reqSize.targetWidth < 1024 && reqSize.targetHeight < 1024)
expect(req).assertEqual(true); expect(req).assertEqual(true);
}) })

View File

@ -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.getDownsamplerDecodingOptions(typeValue, request, size, ImageKnifeRequestSource.SRC) decodingOptions = ImageKnifeLoader.downsamplerReqSize(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.getDownsamplerDecodingOptions(typeValue, request, size) opts = ImageKnifeLoader.downsamplerReqSize(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 getDownsamplerDecodingOptions(typeValue: string, request: RequestJobRequest, size: Size, static downsamplerReqSize(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,

View File

@ -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_OUTSIDE_MEMORY?SampleSizeRounding.MEMORY:SampleSizeRounding.QUALITY return downsampType === DownsampleStrategy.CENTER_INSIDE_MEMORY?SampleSizeRounding.MEMORY:SampleSizeRounding.QUALITY
} }
} }
@ -138,11 +138,11 @@ export enum DownsampleStrategy {
//两边自适应质量优先 //两边自适应质量优先
FIT_CENTER_QUALITY, FIT_CENTER_QUALITY,
//按照宽高比的最大比进行适配内存优先 //按照宽高比的最大比进行适配内存优先
CENTER_OUTSIDE_MEMORY, CENTER_INSIDE_MEMORY,
//按照宽高比的最大比进行适配质量优先 //按照宽高比的最大比进行适配质量优先
CENTER_OUTSIDE_QUALITY, CENTER_INSIDE_QUALITY,
//宽高进行等比缩放宽高里面最小的比例先放进去,然后再根据原图的缩放比去适配 //宽高进行等比缩放宽高里面最小的比例先放进去,然后再根据原图的缩放比去适配
AT_LEAST, CENTER_OUTSIDE,
//不进行降采样 //不进行降采样
NONE, NONE,
} }

View File

@ -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_OUTSIDE_MEMORY: case DownsampleStrategy.CENTER_INSIDE_MEMORY:
case DownsampleStrategy.CENTER_OUTSIDE_QUALITY: case DownsampleStrategy.CENTER_INSIDE_QUALITY:
return new CenterInside(); return new CenterInside();
case DownsampleStrategy.AT_LEAST: case DownsampleStrategy.CENTER_OUTSIDE:
return new CenterOutside(); return new CenterOutside();
default: default:
throw new Error('Unsupported downsampling strategy'); throw new Error('Unsupported downsampling strategy');