From e95dacac92211b6ed295adf6bd37f1272a85963f Mon Sep 17 00:00:00 2001 From: zhoulisheng <635547767@qq.com> Date: Fri, 1 Dec 2023 16:04:54 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=A7=A3=E5=86=B3FIT=5FCENTER=E5=92=8CCENTER?= =?UTF-8?q?=5FINSIDE=E5=8F=98=E6=8D=A2=E4=BB=A3=E7=A0=81=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84crash=E9=97=AE=E9=A2=98=202.demo?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=87=8D=E5=A4=8D=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhoulisheng <635547767@qq.com> --- .../ets/pages/imageknifeTestCaseIndex.ets | 30 +--- .../imageknife/transform/TransformUtils.ets | 147 ++++++++++-------- .../transform/pixelmap/CenterInside.ets | 10 +- .../transform/pixelmap/FitCenter.ets | 8 +- 4 files changed, 86 insertions(+), 109 deletions(-) diff --git a/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets b/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets index 161fcf8..ac35f87 100644 --- a/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets +++ b/entry/src/main/ets/pages/imageknifeTestCaseIndex.ets @@ -207,35 +207,11 @@ struct IndexFunctionDemo { - }.width('100%').height(60).backgroundColor(Color.Pink) - Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - - Button("大量照片和重复数据") - .onClick(() => { - console.log("pages/manyPhotoShowPage 页面跳转") - router.pushUrl({ url: "pages/manyPhotoShowPage" }); - }).margin({ top: 15 }) - Button("图片加载暂停和恢复") - .onClick(() => { - console.log("pages/manyPhotoShowPage 页面跳转") - router.pushUrl({ url: "pages/photosPausedResumedPage" }); - }).margin({ top: 15 }) - Button("部分url测试") - .onClick(() => { - console.log("pages/tempUrlTestPage 页面跳转") - router.pushUrl({ url: "pages/tempUrlTestPage" }); - }).margin({ top: 15 }) - Button("测试drawFactory") - .onClick(() => { - console.log("pages/drawFactoryTestPage 页面跳转") - router.pushUrl({ url: "pages/drawFactoryTestPage" }); - }).margin({ top: 15 }) - }.width('100%').height(60).backgroundColor(Color.Pink) Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Button("大量照片和重复数据") + Button("大量照片") .onClick(() => { console.log("pages/manyPhotoShowPage 页面跳转") router.pushUrl({ url: "pages/manyPhotoShowPage" }); @@ -254,12 +230,12 @@ struct IndexFunctionDemo { }.width('100%').height(60).backgroundColor(Color.Pink) Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { - Button("图片加载暂停和恢复") + Button("图片暂停和恢复") .onClick(() => { console.log("pages/photosPausedResumedPage 页面跳转") router.pushUrl({ url: "pages/photosPausedResumedPage" }); }).margin({ top: 15 }) - Button("List滑动时暂停图片加载,滑动结束恢复图片加载") + Button("List滑动暂停和恢复") .onClick(() => { console.log("pages/photosPausedResumedPage2 页面跳转") router.pushUrl({ url: "pages/photosPausedResumedPage2" }); diff --git a/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets b/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets index a0876ac..2b0366b 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/TransformUtils.ets @@ -12,96 +12,103 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {AsyncTransform} from '../transform/AsyncTransform' +import { AsyncTransform } from '../transform/AsyncTransform' import image from '@ohos.multimedia.image' -import {Size} from '../../imageknife/RequestOption' +import { Size } from '../../imageknife/RequestOption' import { BusinessError } from '@ohos.base' +import { Constants } from '../constants/Constants' + export class TransformUtils { static centerCrop(buf: ArrayBuffer, outWidth: number, outHeihgt: number, callback?: AsyncTransform>) { - let imageSource:image.ImageSource = image.createImageSource(buf); - imageSource.getImageInfo() - .then((p) => { - 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; - } else { - if (pw * outHeihgt > outWidth * ph) { - scale = outHeihgt / ph; - } else { - scale = outWidth / pw; - } - sw = pw * scale; - sh = ph * scale; - } - let options:image.DecodingOptions = { - editable: true, - rotate: 0, - desiredRegion: { size: { width: sw, height: sh }, - x: pw / 2 - sw / 2, - y: ph / 2 - sh / 2, - }, - } - if (callback) { - callback.asyncTransform('', imageSource.createPixelMap(options)); - } - }) - .catch((error:BusinessError) => { - callback?.asyncTransform(error, null); - }) + let imageSource: image.ImageSource = image.createImageSource(buf); + imageSource.getImageInfo() + .then((p) => { + 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; + } else { + if (pw * outHeihgt > outWidth * ph) { + scale = outHeihgt / ph; + } else { + scale = outWidth / pw; + } + sw = pw * scale; + sh = ph * scale; + } + let options: image.DecodingOptions = { + editable: true, + rotate: 0, + desiredRegion: { size: { width: sw, height: sh }, + x: pw / 2 - sw / 2, + y: ph / 2 - sh / 2, + }, + } + if (callback) { + callback.asyncTransform('', imageSource.createPixelMap(options)); + } + }) + .catch((error: BusinessError) => { + callback?.asyncTransform(error, null); + }) } - static rotateImage(buf: ArrayBuffer, degreesToRotate: number): Promise{ - let imageSource:image.ImageSource = image.createImageSource(buf); - let options:image.DecodingOptions = { + static rotateImage(buf: ArrayBuffer, degreesToRotate: number): Promise { + let imageSource: image.ImageSource = image.createImageSource(buf); + let options: image.DecodingOptions = { editable: true, rotate: degreesToRotate } - let promise:Promise = imageSource.createPixelMap(options); + let promise: Promise = imageSource.createPixelMap(options); imageSource.release() return promise; } static centerInside(buf: ArrayBuffer, outWidth: number, outHeihgt: number, - callback?: AsyncTransform>) { - let imageSource:image.ImageSource = image.createImageSource(buf); + callback?: AsyncTransform) { + let imageSource: image.ImageSource = image.createImageSource(buf); imageSource.getImageInfo() - .then((p:image.ImageInfo) => { + .then((p: image.ImageInfo) => { let pw = p.size.width; let ph = p.size.height; if (pw <= outWidth && ph <= outHeihgt) { - let promise:Promise = imageSource.createPixelMap() - imageSource.release() - callback?.asyncTransform('', promise); + imageSource.createPixelMap() + .then(p => { + callback?.asyncTransform('', p); + imageSource.release() + }).catch((e: BusinessError) => { + callback?.asyncTransform(Constants.PROJECT_TAG + ';CenterInside error:' + e, null); + imageSource.release() + }) } else { TransformUtils.fitCenter(buf, outWidth, outHeihgt, callback); } }) - .catch((error:BusinessError) => { + .catch((error: BusinessError) => { callback?.asyncTransform(error, null); }) } static fitCenter(buf: ArrayBuffer, outWidth: number, outHeihgt: number - , callback?: AsyncTransform>) { - let imageSource:image.ImageSource = image.createImageSource(buf); + , callback?: AsyncTransform) { + let imageSource: image.ImageSource = image.createImageSource(buf); imageSource.getImageInfo() - .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); + .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); - let targetWidth:number = Math.round(minPercentage * pw); - let targetHeight:number = 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; @@ -110,18 +117,24 @@ export class TransformUtils { targetWidth = minPercentage * pw; targetHeight = minPercentage * ph; } - let options:image.DecodingOptions = { + let options: image.DecodingOptions = { editable: true, rotate: 0, desiredSize: { width: targetWidth, height: targetHeight } } - if (callback) { - let promise:Promise = imageSource.createPixelMap(options); - imageSource.release(); - callback.asyncTransform('', promise); + if (callback != undefined) { + imageSource.createPixelMap(options) + .then(p => { + callback?.asyncTransform('', p); + imageSource.release(); + }) + .catch((e: BusinessError) => { + callback?.asyncTransform(Constants.PROJECT_TAG + ';FitCenter error:' + e, null); + imageSource.release(); + }) } }) - .catch((e:BusinessError) => { + .catch((e: BusinessError) => { if (callback) { callback.asyncTransform(e, null); } @@ -132,13 +145,13 @@ export class TransformUtils { if (!imageSource) { return; } - imageSource.getImageInfo((err:BusinessError, value:image.ImageInfo) => { + imageSource.getImageInfo((err: BusinessError, value: image.ImageInfo) => { if (err) { func?.asyncTransform(err, null) return; } - let pWidth:number = value.size.width; - let pHeight:number = value.size.height; + let pWidth: number = value.size.width; + let pHeight: number = value.size.height; func?.asyncTransform('', { width: pWidth, height: pHeight }); }) } 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 016ee2d..94cb818 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterInside.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/CenterInside.ets @@ -13,7 +13,7 @@ * 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' @@ -31,12 +31,6 @@ export class CenterInside implements BaseTransform { } return; } - 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); - }) - }}) + TransformUtils.centerInside(buf, request.size.width, request.size.height, func) } } \ 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 b820ba0..324d164 100644 --- a/imageknife/src/main/ets/components/imageknife/transform/pixelmap/FitCenter.ets +++ b/imageknife/src/main/ets/components/imageknife/transform/pixelmap/FitCenter.ets @@ -31,12 +31,6 @@ export class FitCenter implements BaseTransform { } return; } - 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); - }) - }}) + TransformUtils.fitCenter(buf, request.size.width, request.size.height, func) } } \ No newline at end of file