From 115118e238bd83abec4cf1a3b2c8d5340530c9ab Mon Sep 17 00:00:00 2001 From: yang Date: Wed, 19 Feb 2025 10:32:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9B=BE=E7=89=87=E6=90=BA?= =?UTF-8?q?=E5=B8=A6=E7=9A=84EXIF=E5=85=83=E6=95=B0=E6=8D=AE=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E6=98=BE=E7=A4=BA=E6=96=B9=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yang --- CHANGELOG.md | 3 + entry/src/main/ets/pages/Index.ets | 5 + entry/src/main/ets/pages/TestImageExif.ets | 92 ++++++++++++++++++ .../main/resources/base/element/string.json | 20 ++++ .../resources/base/profile/main_pages.json | 3 +- .../main/resources/rawfile/rotate/rotate.jpg | Bin 0 -> 22791 bytes .../rawfile/rotate/rotate_mirror.jpg | Bin 0 -> 22793 bytes .../rotate/rotate_mirror_rotate270.jpg | Bin 0 -> 22793 bytes .../rawfile/rotate/rotate_rotate90.jpg | Bin 0 -> 22793 bytes .../main/resources/zh_CN/element/string.json | 20 ++++ library/oh-package.json5 | 2 +- library/src/main/ets/ImageKnifeLoader.ets | 75 ++++++++++++++ library/src/main/ets/model/ImageKnifeData.ets | 6 ++ 13 files changed, 224 insertions(+), 2 deletions(-) create mode 100644 entry/src/main/ets/pages/TestImageExif.ets create mode 100644 entry/src/main/resources/rawfile/rotate/rotate.jpg create mode 100644 entry/src/main/resources/rawfile/rotate/rotate_mirror.jpg create mode 100644 entry/src/main/resources/rawfile/rotate/rotate_mirror_rotate270.jpg create mode 100644 entry/src/main/resources/rawfile/rotate/rotate_rotate90.jpg diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c7f8c3..523e46e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 3.2.2-rc.1 +- Support EXIF metadata carried by images as display orientation + ## 3.2.2-rc.0 - Add ImageKnifeComponent to destroy network request interruption - Code refactoring during the download of image resources stage diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 9707118..6ee83eb 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -224,6 +224,11 @@ struct Index { }); }) + Button($r('app.string.test_exif')).margin({ top: 10 }).onClick(() => { + router.push({ + uri: 'pages/TestImageExif', + }); + }) } } .width('100%') .height('100%') diff --git a/entry/src/main/ets/pages/TestImageExif.ets b/entry/src/main/ets/pages/TestImageExif.ets new file mode 100644 index 0000000..4a29b1d --- /dev/null +++ b/entry/src/main/ets/pages/TestImageExif.ets @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ImageKnifeComponent } from '@ohos/libraryimageknife'; +import fs from '@ohos.file.fs'; + +@Entry +@Component +struct LocalImage { + scroller: Scroller = new Scroller; + + build() { + Scroll(this.scroller) { + Column() { + Column() { + Text($r('app.string.base_image')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + Row() { + Image($rawfile('rotate/rotate.jpg')).width(100).height(100).margin({ right: 10 }) + ImageKnifeComponent({ + imageKnifeOption: { + loadSrc: $rawfile('rotate/rotate.jpg'), + objectFit: ImageFit.Contain + } + }).width(100).height(100) + } + } + .margin({ bottom: 20 }) + + Column() { + Text($r('app.string.rotate_mirror')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + Row() { + Image($rawfile('rotate/rotate_mirror.jpg')).width(100).height(100).margin({ right: 10 }) + ImageKnifeComponent({ + imageKnifeOption: { + loadSrc: $rawfile('rotate/rotate_mirror.jpg'), + objectFit: ImageFit.Contain + } + }).width(100).height(100) + } + }.margin({ bottom: 20 }) + + Column() { + Text($r('app.string.rotate_rotate90')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + Row() { + Image($rawfile('rotate/rotate_rotate90.jpg')).width(100).height(100).margin({ right: 10 }) + ImageKnifeComponent({ + imageKnifeOption: { + loadSrc: $rawfile('rotate/rotate_rotate90.jpg'), + objectFit: ImageFit.Contain + } + }).width(100).height(100) + } + }.margin({ bottom: 20 }) + + Column() { + Text($r('app.string.rotate_mirror_rotate270')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + Row() { + Image($rawfile('rotate/rotate_mirror_rotate270.jpg')).width(100).height(100).margin({ right: 10 }) + ImageKnifeComponent({ + imageKnifeOption: { + loadSrc: $rawfile('rotate/rotate_mirror_rotate270.jpg'), + objectFit: ImageFit.Contain + } + }).width(100).height(100) + } + } + } + .width('100%') + } + .height('100%') + } +} + diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index f2cea47..e0ff91e 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -687,6 +687,26 @@ { "name": "Error_Message", "value": "error message" + }, + { + "name": "test_exif", + "value": "Test display orientation base on the EXIF metadata " + }, + { + "name": "base_image", + "value": "The image don't carry rotation information" + }, + { + "name": "rotate_mirror", + "value": "Mirror horizontal" + }, + { + "name": "rotate_rotate90", + "value": "Rotate 90°" + }, + { + "name": "rotate_mirror_rotate270", + "value": "Mirror horizontal and rotate 270°" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index d0370e7..67444d8 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -42,6 +42,7 @@ "pages/SingleImageCallBack", "pages/MultipleImageCallBack", "pages/LocalImage", - "pages/ErrorMessageDownload" + "pages/ErrorMessageDownload", + "pages/TestImageExif" ] } \ No newline at end of file diff --git a/entry/src/main/resources/rawfile/rotate/rotate.jpg b/entry/src/main/resources/rawfile/rotate/rotate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..982708a5f2223d38655be0ae6aecef19019b7c26 GIT binary patch literal 22791 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⪻q`F^3< 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 RUpJjJF7v$gtH7@w{(pR4W6uBp literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/rotate/rotate_mirror_rotate270.jpg b/entry/src/main/resources/rawfile/rotate/rotate_mirror_rotate270.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e764fdc9add39ff8914eee0aef416eb3af25757 GIT binary patch literal 22793 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/rawfile/rotate/rotate_rotate90.jpg b/entry/src/main/resources/rawfile/rotate/rotate_rotate90.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d31a7cc09911a4b17b7b53483edd6e258e6c8e2 GIT binary patch literal 22793 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 + exif = res; + }).catch((error: BusinessError)=>{ + LogUtil.info("The normal image don't have rotation information, " + error.message); + }) + await imageSource.createPixelMap(decodingOptions) .then((pixelmap: PixelMap) => { timeInfo.decodeEndTime = Date.now(); @@ -186,6 +195,17 @@ export class ImageKnifeLoader { } catch (e) { LogUtil.error('PixelMap setTransferDetached failed:' + JSON.stringify(e)) } + // 设置翻转和旋转角度 + if(exif && exif !== 'Top-left'){ + let result = ImageKnifeLoader.getOrientation(exif); + if(result.horizontal || result.vertical) { + resPixelmap?.flipSync(result.horizontal, result.vertical); + } + if(result.rotate > 0) { + resPixelmap?.rotateSync(result.rotate); + } + LogUtil.log('The normal image set flip , horizontal=' + result.horizontal + ', vertical=' +result.vertical + ', rotate=' + result.rotate); + } //获取各个pixelMap的大小 if (resPixelmap !== undefined) { @@ -253,6 +273,15 @@ export class ImageKnifeLoader { return } timeInfo.decodeStartTime = Date.now(); + + // 获取旋转信息 + let exif: string | undefined = undefined; + await imageSource.getImageProperty(image.PropertyKey.ORIENTATION).then((res)=>{ + exif = res; + }).catch((error: BusinessError)=>{ + LogUtil.info("Svg image don't have rotation information, " + error.message); + }) + await imageSource.createPixelMap(opts) .then((pixelmap: PixelMap) => { timeInfo.decodeEndTime = Date.now(); @@ -260,6 +289,17 @@ export class ImageKnifeLoader { imageSource.release() try { resPixelmap.setTransferDetached(true) + // 设置翻转和旋转角度 + if(exif && exif !== 'Top-left'){ + let result = ImageKnifeLoader.getOrientation(exif); + if(result.horizontal || result.vertical) { + resPixelmap?.flipSync(result.horizontal, result.vertical); + } + if(result.rotate > 0) { + resPixelmap?.rotateSync(result.rotate); + } + LogUtil.log('Svg image set flip , horizontal=' + result.horizontal + ', vertical=' +result.vertical + ', rotate=' + result.rotate); + } } catch (e) { LogUtil.error('PixelMap setTransferDetached failed:' + JSON.stringify(e)) } @@ -489,4 +529,39 @@ export class ImageKnifeLoader { } } } + + static getOrientation(orientation: string | undefined){ + let horizontal: boolean = false; + let vertical: boolean = false; + let rotate: number= 0; + switch (orientation){ + case 'Top-left': break + case 'Top-right': + horizontal = true; + break; + case 'Bottom-left': + vertical = true; + break + case 'Bottom-right': + rotate = 180; + break; + case 'Left-top': + horizontal = true; + rotate = 270; + break + case 'Right-top': + rotate = 90; + break; + case 'Left-bottom': + rotate = 270; + break + case 'Right-bottom': + horizontal = true; + rotate = 90; + break; + } + + let data: FlipRotate = { horizontal: horizontal, vertical: vertical, rotate:rotate }; + return data + } } \ No newline at end of file diff --git a/library/src/main/ets/model/ImageKnifeData.ets b/library/src/main/ets/model/ImageKnifeData.ets index 91268e6..fbf8b8c 100644 --- a/library/src/main/ets/model/ImageKnifeData.ets +++ b/library/src/main/ets/model/ImageKnifeData.ets @@ -158,3 +158,9 @@ export interface RequestJobRequest { readTimeout?: number } +export interface FlipRotate{ + horizontal: boolean, + vertical: boolean, + rotate: number, +} +