lxy před 1 rokem
rodič
revize
4b420b0ccf

+ 8 - 0
Example/Pods/Pods.xcodeproj/project.pbxproj

@@ -65,6 +65,8 @@
 		285E5A17EE462D4A1A85C685FDAB4C93 /* LenzDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = D785BBEA22031EFDAFA81BFFB1F4AF9E /* LenzDataManager.m */; };
 		290E68592A0DC72B0012A1FE /* PCSDeviceOrientationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 290E68572A0DC72B0012A1FE /* PCSDeviceOrientationManager.h */; };
 		290E685A2A0DC72B0012A1FE /* PCSDeviceOrientationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 290E68582A0DC72B0012A1FE /* PCSDeviceOrientationManager.m */; };
+		297EF2B72A15C1A1009FB183 /* UIImage+ImageRotate.h in Headers */ = {isa = PBXBuildFile; fileRef = 297EF2B52A15C1A1009FB183 /* UIImage+ImageRotate.h */; };
+		297EF2B82A15C1A1009FB183 /* UIImage+ImageRotate.m in Sources */ = {isa = PBXBuildFile; fileRef = 297EF2B62A15C1A1009FB183 /* UIImage+ImageRotate.m */; };
 		2C267418FF64CF535B50A41839BF3B7C /* SVRadialGradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = DF49707D0225F15883F4B82A11B0581D /* SVRadialGradientLayer.m */; };
 		2C813C52CD7844028859DFA9BF21F8BF /* OperationNodeMovie.m in Sources */ = {isa = PBXBuildFile; fileRef = 61BFBD445E4773577F009B98A0C9F00E /* OperationNodeMovie.m */; };
 		2CB5F2C4AF5D8B06C8B58A4D9E2B5CB4 /* YYTextParser.m in Sources */ = {isa = PBXBuildFile; fileRef = FFF6810117FEEF2711F6E9B5437B1204 /* YYTextParser.m */; };
@@ -407,6 +409,8 @@
 		290E68572A0DC72B0012A1FE /* PCSDeviceOrientationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PCSDeviceOrientationManager.h; sourceTree = "<group>"; };
 		290E68582A0DC72B0012A1FE /* PCSDeviceOrientationManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PCSDeviceOrientationManager.m; sourceTree = "<group>"; };
 		295D21E3A53E31CD670E1455FF043490 /* ImageCacheLRU.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = ImageCacheLRU.m; sourceTree = "<group>"; };
+		297EF2B52A15C1A1009FB183 /* UIImage+ImageRotate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImage+ImageRotate.h"; sourceTree = "<group>"; };
+		297EF2B62A15C1A1009FB183 /* UIImage+ImageRotate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ImageRotate.m"; sourceTree = "<group>"; };
 		29B829673F9D5AB2BD30E5304DB7EEA6 /* miniflann.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = miniflann.hpp; path = opencv2.framework/Versions/A/Headers/flann/miniflann.hpp; sourceTree = "<group>"; };
 		2A3C694AF3328B029D5744E8AD11D789 /* QuitMultipleModeAlertViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = QuitMultipleModeAlertViewController.xib; sourceTree = "<group>"; };
 		2A4C82A7E53516C57C23D930064D55FA /* limits.hpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.h; name = limits.hpp; path = opencv2.framework/Versions/A/Headers/core/cuda/limits.hpp; sourceTree = "<group>"; };
@@ -1607,6 +1611,8 @@
 				DDA696B09B5BC657EDD9EEF4F23DD670 /* UIImage+name.m */,
 				6A8E430D8C35488AC558374EE4BA1474 /* UIView+JKAdd.h */,
 				7CAD41A57A8B36805097520423BF764A /* UIView+JKAdd.m */,
+				297EF2B52A15C1A1009FB183 /* UIImage+ImageRotate.h */,
+				297EF2B62A15C1A1009FB183 /* UIImage+ImageRotate.m */,
 			);
 			path = "UIView+tool";
 			sourceTree = "<group>";
@@ -1954,6 +1960,7 @@
 				3934266CBA9FE57C6CD5C08D53916425 /* PhotoAlbumListViewController.h in Headers */,
 				24779718BB22909F42B4DBC337C806E2 /* PhotoAlbumModel.h in Headers */,
 				E48C457EF5B6E962BC3A5331EB509B06 /* PhotoCell.h in Headers */,
+				297EF2B72A15C1A1009FB183 /* UIImage+ImageRotate.h in Headers */,
 				BEB96124A1C79D9FA310ABFC72BBF3E7 /* PhotoCollectionViewCell.h in Headers */,
 				5DE003B558DD544DEB2DF108B45540B2 /* PhotoListCellModel.h in Headers */,
 				9CA5B684886A4C68A319B3C23794E8C6 /* PhotoListViewController.h in Headers */,
@@ -2251,6 +2258,7 @@
 				B4D7B82D12DEDD2575499CE0BDDEE929 /* PCSThemeColorManager.m in Sources */,
 				5C65312243C01C32249E9EF470D3F576 /* PCSTools.m in Sources */,
 				0457B2F5E5FA69A917BD55A6BE132310 /* PhotoAlbumListViewController.m in Sources */,
+				297EF2B82A15C1A1009FB183 /* UIImage+ImageRotate.m in Sources */,
 				1BAC44FBDE7B94B6235AB67801783C8F /* PhotoAlbumModel.m in Sources */,
 				4441E723F7B8A9AB0D79CF3F0809374E /* PhotoCell.m in Sources */,
 				18FF59BD85BDE080C251C114E51DD67D /* PhotoCell.xib in Sources */,

+ 1 - 0
LenzCameraNativeModuleForRN/Classes/inner/DB/DBModels/LenzCachedResourceModel.h

@@ -26,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic) BOOL isRemake;
 @property (nonatomic) SDKCaptureModeIndex mode;
 @property (nonatomic) UIImage *image;
+@property (nonatomic) UIImage *previewImage;
 @property (nonatomic) NSMutableArray *keyFrame;
 @property (nonatomic) BOOL isStitch;
 

+ 57 - 28
LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSBaseViewController.m

@@ -51,6 +51,7 @@
 #import "SVProgressHUD.h"
 #import "PCSAutherView.h"
 #import "PCSDeviceOrientationManager.h"
+#import "UIImage+ImageRotate.h"
 
 #import <LenzTensorFlowSDK/LenzTensorFlow.h>
 
@@ -2498,6 +2499,8 @@
 - (void)savePhotoWith:(NSData *)data isRemake:(BOOL)isRemake{
     UIImage *image = [[UIImage alloc] initWithData:data];
 
+    UIImage *saveImage = [self rotateImageWith:image];
+    data = UIImageJPEGRepresentation(saveImage, 1);
     NSString *path = [LenzDataManager saveImageWith:data mode:self.mode];
     LenzResourceItemModel *itemModel = [[LenzResourceItemModel alloc]init];
     itemModel.path = path;
@@ -2511,6 +2514,7 @@
     
     
     itemModel.image = image;
+    itemModel.previewImage = saveImage;
     itemModel.isRemake = isRemake;
 
     switch (self.mode) {
@@ -2559,6 +2563,7 @@
         return;
     }
     UIImage *image = [[UIImage alloc] initWithData:imageData];
+    
     BOOL isRemake = [self.tensorFlow remake:image];
     __block BOOL needCheckRemake = NO;
     [[SDKParameters shared].items enumerateObjectsUsingBlock:^(SDKParametersItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
@@ -2628,20 +2633,20 @@
             case SDK_CAPTURE_MODE_CONTINUOUS: {
                 if (self.resourceModel.continousArray.count > 0) {
                     LenzResourceItemModel *model = self.resourceModel.continousArray.lastObject;
-                    image = model.image;
+                    image = model.previewImage;
                 } else {
                     if (self.resourceModel.singleArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.singleArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.movieArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.movieArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.panoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.panoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.aiPanoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.aiPanoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     }
                 }
             }
@@ -2650,20 +2655,20 @@
             case SDK_CAPTURE_MODE_SINGLE:{
                 if (self.resourceModel.singleArray.count > 0) {
                     LenzResourceItemModel *model = self.resourceModel.singleArray.lastObject;
-                    image = model.image;
+                    image = model.previewImage;
                 } else {
                     if (self.resourceModel.continousArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.continousArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.movieArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.movieArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.panoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.panoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.aiPanoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.aiPanoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     }
                 }
             }
@@ -2672,20 +2677,20 @@
             case SDK_CAPTURE_MODE_MOVIE:{
                 if (self.resourceModel.movieArray.count > 0) {
                     LenzResourceItemModel *model = self.resourceModel.movieArray.lastObject;
-                    image = model.image;
+                    image = model.previewImage;
                 } else {
                     if (self.resourceModel.singleArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.singleArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.continousArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.continousArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.panoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.panoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.aiPanoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.aiPanoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     }
                 }
             }
@@ -2694,20 +2699,20 @@
             case SDK_CAPTURE_MODE_PANORAMA:{
                 if (self.resourceModel.panoramArray.count > 0) {
                     LenzResourceItemModel *model = self.resourceModel.panoramArray.lastObject;
-                    image = model.image;
+                    image = model.previewImage;
                 } else {
                     if (self.resourceModel.singleArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.singleArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.movieArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.movieArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.continousArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.continousArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.aiPanoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.aiPanoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     }
                 }
             }
@@ -2716,20 +2721,20 @@
             case SDK_CAPTURE_MODE_INTELLEGENCE_PANORAMA:{
                 if (self.resourceModel.aiPanoramArray.count > 0) {
                     LenzResourceItemModel *model = self.resourceModel.aiPanoramArray.lastObject;
-                    image = model.image;
+                    image = model.previewImage;
                 } else {
                     if (self.resourceModel.singleArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.singleArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.movieArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.movieArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.panoramArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.panoramArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     } else if (self.resourceModel.continousArray.count > 0) {
                         LenzResourceItemModel *model = self.resourceModel.continousArray.lastObject;
-                        image = model.image;
+                        image = model.previewImage;
                     }
                 }
             }
@@ -2918,6 +2923,7 @@
                 
                 self.isVideoStitchStopedWhenRecording = NO;
                 UIImage *image = [LenStitcher getCurrentPanoramaShowImage];
+                UIImage *saveImage = [self rotateImageWith:image];
                 LenzResourceItemModel *model = nil;
                 if (self.mode == SDK_CAPTURE_MODE_PANORAMA) {
                     model = self.resourceModel.panoramArray.lastObject;
@@ -2943,7 +2949,8 @@
                             model.mode = self.mode;
                             if ([LenStitcher getCurrentPanoramaShow]) {
                                 model.image = image;
-                                NSString *path = [LenzDataManager saveImageWith:UIImageJPEGRepresentation(image, .8) mode:self.mode];
+                                model.previewImage = saveImage;
+                                NSString *path = [LenzDataManager saveImageWith:UIImageJPEGRepresentation(saveImage, .8) mode:self.mode];
                                 model.path = path;
                             }
                             [self updateViewStatusWhenStitchSave:NO];
@@ -2961,7 +2968,7 @@
                                 }];
                                 
                                 if (needSave && keyFrame) {
-                                    NSString *path = [LenzDataManager saveImageWith:UIImageJPEGRepresentation(image, .6) mode:self.mode];
+                                    NSString *path = [LenzDataManager saveImageWith:UIImageJPEGRepresentation(saveImage, .6) mode:self.mode];
                                     if (path) {
                                         [model.keyFrame addObject:path];
                                     }
@@ -2970,7 +2977,7 @@
                                     [self.panoramaGuideView showImageWith:image];
                                 } else {
                                     self.ablumImageView.hidden = NO;
-                                    self.ablumImageView.image = image;
+                                    self.ablumImageView.image = saveImage;
                                 }
                             }
 
@@ -3072,6 +3079,10 @@
 - (BOOL)shouldAutorotate {
     return NO;
 }
+- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
+    return UIInterfaceOrientationMaskPortrait;
+}
+
 
 - (UIImage *)videoFrameImageWith:(NSURL *)url {
     AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:url options:nil];
@@ -3084,4 +3095,22 @@
     return frameImage;
 }
 
+
+
+
+- (UIImage *)rotateImageWith:(UIImage *)image {
+    if (self.currentTgDirection == TgDirectionPortrait) {
+        return image;
+    } else if (self.currentTgDirection == TgDirectionLeft) {
+        return [image imageRotateWithIndegree:M_PI/2];
+    } else if (self.currentTgDirection == TgDirectionRight) {
+        return [image imageRotateWithIndegree:-M_PI/2];
+    } else if (self.currentTgDirection == TgDirectionDown) {
+        return [image imageRotateWithIndegree:M_PI];
+    }
+    
+    return image;
+}
+
+
 @end

+ 1 - 1
LenzCameraNativeModuleForRN/Classes/inner/PCSBaseViewController/PCSPreviewViewController.m

@@ -48,7 +48,7 @@
 }
 - (void)setModel:(LenzResourceItemModel *)model {
     _model = model;
-    self.imageView.image = model.image;
+    self.imageView.image = model.previewImage;
     if (model.mode == SDK_CAPTURE_MODE_MOVIE) {
         self.videoImageView.hidden = NO;
     } else {

+ 18 - 0
LenzCameraNativeModuleForRN/Classes/inner/UI/UIView+tool/UIImage+ImageRotate.h

@@ -0,0 +1,18 @@
+//
+//  UIImage+ImageRotate.h
+//  LenzSDK
+//
+//  Created by lr on 2023/5/18.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIImage (ImageRotate)
+
+- (UIImage *)imageRotateWithIndegree:(CGFloat)indegree;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 54 - 0
LenzCameraNativeModuleForRN/Classes/inner/UI/UIView+tool/UIImage+ImageRotate.m

@@ -0,0 +1,54 @@
+//
+//  UIImage+ImageRotate.m
+//  LenzSDK
+//
+//  Created by lr on 2023/5/18.
+//
+
+#import "UIImage+ImageRotate.h"
+#import <QuartzCore/QuartzCore.h>
+#import <Accelerate/Accelerate.h>
+
+@implementation UIImage (ImageRotate)
+
+
+#pragma mark - 图片旋转
+
+// 1 image --> Context 2. context  3. context --> image
+
+- (UIImage *)imageRotateWithIndegree:(CGFloat)indegree {
+    
+    // 1. image --> context
+    size_t width = (size_t)(self.size.width * self.scale);
+    size_t height = (size_t)(self.size.height * self.scale);
+
+    size_t bytesPerRow = width * 4;                        // 每行图片字节数
+    CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst;      // alpha
+    
+    CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault | alphaInfo);
+    
+    if (!bmContext) {
+        return nil;
+    }
+    
+    CGContextDrawImage(bmContext, CGRectMake(0, 0, width, height), self.CGImage);
+    
+    // 2. 旋转
+    UInt8 * data = (UInt8 *)CGBitmapContextGetData(bmContext);
+    
+    // 需要引入 #import <Accelerate/Accelerate.h>  解释这个类干什么用的
+    vImage_Buffer src = {data,height,width,bytesPerRow};
+    vImage_Buffer dest = {data,height,width,bytesPerRow};
+    Pixel_8888 bgColor = {0,0,0,0};
+    vImageRotate_ARGB8888(&src, &dest, NULL, indegree, bgColor, kvImageBackgroundColorFill);
+    
+    // 3. context --> UIImage
+    CGImageRef rotateImageRef = CGBitmapContextCreateImage(bmContext);
+    UIImage * rotateImage = [UIImage imageWithCGImage:rotateImageRef scale:self.scale orientation:self.imageOrientation];
+    
+    CGContextRelease(bmContext);
+    CGImageRelease(rotateImageRef);
+    return rotateImage;
+}
+
+@end