From 04e2e825074e73ae6478903e8d62aebffab60e80 Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Thu, 13 Jan 2022 10:36:38 +0800 Subject: [PATCH 01/11] fix load error when the image is BMP format --- .../FLTPHPickerSaveImageToPathOperation.m | 110 +++++++++++------- 1 file changed, 70 insertions(+), 40 deletions(-) diff --git a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m index 30da22774d07..f6f334092b30 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m +++ b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m @@ -3,7 +3,7 @@ // found in the LICENSE file. #import "FLTPHPickerSaveImageToPathOperation.h" - +#import API_AVAILABLE(ios(14)) @interface FLTPHPickerSaveImageToPathOperation () @@ -82,48 +82,78 @@ - (void)start { } if (@available(iOS 14, *)) { [self setExecuting:YES]; - [self.result.itemProvider - loadObjectOfClass:[UIImage class] - completionHandler:^(__kindof id _Nullable image, - NSError *_Nullable error) { - if ([image isKindOfClass:[UIImage class]]) { - __block UIImage *localImage = image; - PHAsset *originalAsset = - [FLTImagePickerPhotoAssetUtil getAssetFromPHPickerResult:self.result]; - - if (self.maxWidth != (id)[NSNull null] || self.maxHeight != (id)[NSNull null]) { - localImage = [FLTImagePickerImageUtil scaledImage:localImage + + NSArray *supportedRepresentations = @[ + UTTypeRAWImage.identifier, + UTTypeTIFF.identifier, + UTTypeBMP.identifier, + UTTypePNG.identifier, + UTTypeHEIF.identifier, + UTTypeHEIC.identifier, + UTTypeJPEG.identifier, + UTTypeWebP.identifier, + UTTypeGIF.identifier, + ]; + for (NSString *identifier in supportedRepresentations) { + if ([self.result.itemProvider hasItemConformingToTypeIdentifier:identifier]) { + [self.result.itemProvider + loadDataRepresentationForTypeIdentifier:identifier + completionHandler:^(NSData *_Nullable data, + NSError *_Nullable error) { + if (error == nil) { + __block UIImage *localImage = + [[UIImage alloc] initWithData:data]; + PHAsset *originalAsset = [FLTImagePickerPhotoAssetUtil + getAssetFromPHPickerResult:self.result]; + + if (self.maxWidth != (id)[NSNull null] || + self.maxHeight != (id)[NSNull null]) { + localImage = [FLTImagePickerImageUtil + scaledImage:localImage maxWidth:self.maxWidth maxHeight:self.maxHeight isMetadataAvailable:originalAsset != nil]; - } - __block NSString *savedPath; - if (!originalAsset) { - // Image picked without an original asset (e.g. User pick image without permission) - savedPath = - [FLTImagePickerPhotoAssetUtil saveImageWithPickerInfo:nil - image:localImage - imageQuality:self.desiredImageQuality]; - [self completeOperationWithPath:savedPath]; - } else { - [[PHImageManager defaultManager] - requestImageDataForAsset:originalAsset - options:nil - resultHandler:^( - NSData *_Nullable imageData, NSString *_Nullable dataUTI, - UIImageOrientation orientation, NSDictionary *_Nullable info) { - // maxWidth and maxHeight are used only for GIF images. - savedPath = [FLTImagePickerPhotoAssetUtil - saveImageWithOriginalImageData:imageData - image:localImage - maxWidth:self.maxWidth - maxHeight:self.maxHeight - imageQuality:self.desiredImageQuality]; - [self completeOperationWithPath:savedPath]; - }]; - } - } - }]; + } + __block NSString *savedPath; + if (!originalAsset) { + // Image picked without an original asset (e.g. User pick + // image without permission) + savedPath = [FLTImagePickerPhotoAssetUtil + saveImageWithPickerInfo:nil + image:localImage + imageQuality:self.desiredImageQuality]; + [self completeOperationWithPath:savedPath]; + } else { + [[PHImageManager defaultManager] + requestImageDataForAsset:originalAsset + options:nil + resultHandler:^( + NSData *_Nullable imageData, + NSString *_Nullable dataUTI, + UIImageOrientation orientation, + NSDictionary *_Nullable info) { + // maxWidth and maxHeight are used only for + // GIF images. + savedPath = [FLTImagePickerPhotoAssetUtil + saveImageWithOriginalImageData: + imageData + image: + localImage + maxWidth: + self.maxWidth + maxHeight: + self.maxHeight + imageQuality: + self.desiredImageQuality]; + [self completeOperationWithPath:savedPath]; + }]; + } + } else { + [self completeOperationWithPath:nil]; + } + }]; + } + } } else { [self setFinished:YES]; } From fefbe8810b0a7845d5eaf59d9e584fc1218d284e Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Thu, 13 Jan 2022 11:42:05 +0800 Subject: [PATCH 02/11] update no response when picking BMP CHANGELOG --- packages/image_picker/image_picker/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index ce29eb522e3d..c7b0e4859587 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -3,6 +3,10 @@ * Updates Android compileSdkVersion to 31. * Fix iOS RunnerUITests search paths. +## 0.8.4+5 + +* Fix no response when picking BMP images in iOS14 devices or simulators. + ## 0.8.4+4 * Fix typos in README.md. From 406308588636170b9bc2579070cd29723ef8893e Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Fri, 14 Jan 2022 10:47:10 +0800 Subject: [PATCH 03/11] fix CHANGELOG.md mistake --- packages/image_picker/image_picker/CHANGELOG.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index c7b0e4859587..a2e68c78a842 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,8 +1,3 @@ -## NEXT - -* Updates Android compileSdkVersion to 31. -* Fix iOS RunnerUITests search paths. - ## 0.8.4+5 * Fix no response when picking BMP images in iOS14 devices or simulators. From c201bcdeaf8e03c814b27b3b129dc7c5c8578025 Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Fri, 11 Mar 2022 15:28:58 +0800 Subject: [PATCH 04/11] update CHANGELOG.md --- packages/image_picker/image_picker/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index a430c3e696a4..609a2a29b663 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,4 +1,8 @@ +## 0.8.4+12 + +* iOS:support images with different formats + ## 0.8.4+11 * Fixes Activity leak. From 5dc0b50db57ebd2024c2c4ac96c4866b0ba9ba7e Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Fri, 11 Mar 2022 16:06:50 +0800 Subject: [PATCH 05/11] format file --- .../ios/Classes/FLTPHPickerSaveImageToPathOperation.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m index b390e7c06e74..4da8ff651d8e 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m +++ b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m @@ -4,8 +4,8 @@ #import -#import "FLTPHPickerSaveImageToPathOperation.h" #import +#import "FLTPHPickerSaveImageToPathOperation.h" API_AVAILABLE(ios(14)) @interface FLTPHPickerSaveImageToPathOperation () From 29ce9b106f512a709fdc55a5519843b6d1e46276 Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Fri, 11 Mar 2022 16:13:55 +0800 Subject: [PATCH 06/11] update yaml version to 0.8.4+12 --- packages/image_picker/image_picker/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 553599f7306f..53158e5c453d 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 -version: 0.8.4+11 + version: 0.8.4+12 environment: sdk: ">=2.14.0 <3.0.0" From 0d4d2b70cdca8cdc94d4a9b4496a377cea611cc8 Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Fri, 11 Mar 2022 17:01:03 +0800 Subject: [PATCH 07/11] remove useless space --- packages/image_picker/image_picker/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 53158e5c453d..e2a7930b28a0 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. repository: https://github.com/flutter/plugins/tree/main/packages/image_picker/image_picker issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+image_picker%22 - version: 0.8.4+12 +version: 0.8.4+12 environment: sdk: ">=2.14.0 <3.0.0" From e2a8fd64513333fc897b62b48424ff1f4b6847ec Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Sun, 13 Mar 2022 21:54:09 +0800 Subject: [PATCH 08/11] add heif,heic,raw,tiff image and unit test --- .../ios/Runner.xcodeproj/project.pbxproj | 26 +++++++++++- .../PickerSaveImageToPathOperationTests.m | 40 ++++++++++++++++++ .../example/ios/TestImages/heicImage.heic | Bin 0 -> 3092 bytes .../example/ios/TestImages/heifImage.heif | Bin 0 -> 3138 bytes .../example/ios/TestImages/rawImage.raw | Bin 0 -> 72 bytes .../example/ios/TestImages/tiffImage.tiff | Bin 0 -> 1122 bytes 6 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 packages/image_picker/image_picker/example/ios/TestImages/heicImage.heic create mode 100644 packages/image_picker/image_picker/example/ios/TestImages/heifImage.heif create mode 100644 packages/image_picker/image_picker/example/ios/TestImages/rawImage.raw create mode 100644 packages/image_picker/image_picker/example/ios/TestImages/tiffImage.tiff diff --git a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj index 2847bfd85046..fedfc355a78a 100644 --- a/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/image_picker/image_picker/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,10 +3,18 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ + 1E9937F227DE2EB50047F36B /* tiffImage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937EE27DE2EB50047F36B /* tiffImage.tiff */; }; + 1E9937F327DE2EB50047F36B /* tiffImage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937EE27DE2EB50047F36B /* tiffImage.tiff */; }; + 1E9937F427DE2EB50047F36B /* heicImage.heic in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937EF27DE2EB50047F36B /* heicImage.heic */; }; + 1E9937F527DE2EB50047F36B /* heicImage.heic in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937EF27DE2EB50047F36B /* heicImage.heic */; }; + 1E9937F627DE2EB50047F36B /* heifImage.heif in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937F027DE2EB50047F36B /* heifImage.heif */; }; + 1E9937F727DE2EB50047F36B /* heifImage.heif in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937F027DE2EB50047F36B /* heifImage.heif */; }; + 1E9937F827DE2EB50047F36B /* rawImage.raw in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937F127DE2EB50047F36B /* rawImage.raw */; }; + 1E9937F927DE2EB50047F36B /* rawImage.raw in Resources */ = {isa = PBXBuildFile; fileRef = 1E9937F127DE2EB50047F36B /* rawImage.raw */; }; 334733FC266813EE00DCC49E /* ImageUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FC8F0ED229FB90B00C8D58F /* ImageUtilTests.m */; }; 334733FD266813F100DCC49E /* MetaDataUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 680049252280D736006DD6AB /* MetaDataUtilTests.m */; }; 334733FE266813F400DCC49E /* PhotoAssetUtilTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 68F4B463228B3AB500C25614 /* PhotoAssetUtilTests.m */; }; @@ -65,6 +73,10 @@ /* Begin PBXFileReference section */ 0C7B151765FD4249454C49AD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 1E9937EE27DE2EB50047F36B /* tiffImage.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = tiffImage.tiff; sourceTree = ""; }; + 1E9937EF27DE2EB50047F36B /* heicImage.heic */ = {isa = PBXFileReference; lastKnownFileType = file; path = heicImage.heic; sourceTree = ""; }; + 1E9937F027DE2EB50047F36B /* heifImage.heif */ = {isa = PBXFileReference; lastKnownFileType = file; path = heifImage.heif; sourceTree = ""; }; + 1E9937F127DE2EB50047F36B /* rawImage.raw */ = {isa = PBXFileReference; lastKnownFileType = file; path = rawImage.raw; sourceTree = ""; }; 334733F22668136400DCC49E /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 334733F62668136400DCC49E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 35AE65F25E0B8C8214D8372B /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -148,6 +160,10 @@ 680049282280E33D006DD6AB /* TestImages */ = { isa = PBXGroup; children = ( + 1E9937EF27DE2EB50047F36B /* heicImage.heic */, + 1E9937F027DE2EB50047F36B /* heifImage.heif */, + 1E9937F127DE2EB50047F36B /* rawImage.raw */, + 1E9937EE27DE2EB50047F36B /* tiffImage.tiff */, 86E9A88F272747B90017E6E0 /* webpImage.webp */, 9FC8F0E8229FA49E00C8D58F /* gifImage.gif */, 680049362280F2B8006DD6AB /* jpgImage.jpg */, @@ -361,10 +377,14 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1E9937F227DE2EB50047F36B /* tiffImage.tiff in Resources */, + 1E9937F827DE2EB50047F36B /* rawImage.raw in Resources */, + 1E9937F427DE2EB50047F36B /* heicImage.heic in Resources */, 86430DF9272D71E9002D9D6C /* gifImage.gif in Resources */, 86E9A894272754A30017E6E0 /* webpImage.webp in Resources */, 86E9A895272769130017E6E0 /* pngImage.png in Resources */, 86E9A896272769150017E6E0 /* jpgImage.jpg in Resources */, + 1E9937F627DE2EB50047F36B /* heifImage.heif in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -372,7 +392,11 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1E9937F927DE2EB50047F36B /* rawImage.raw in Resources */, 9FC8F0EC229FA68500C8D58F /* gifImage.gif in Resources */, + 1E9937F327DE2EB50047F36B /* tiffImage.tiff in Resources */, + 1E9937F527DE2EB50047F36B /* heicImage.heic in Resources */, + 1E9937F727DE2EB50047F36B /* heifImage.heif in Resources */, 680049382280F2B9006DD6AB /* pngImage.png in Resources */, 680049392280F2B9006DD6AB /* jpgImage.jpg in Resources */, ); diff --git a/packages/image_picker/image_picker/example/ios/RunnerTests/PickerSaveImageToPathOperationTests.m b/packages/image_picker/image_picker/example/ios/RunnerTests/PickerSaveImageToPathOperationTests.m index f94db83d5696..06c652e35613 100644 --- a/packages/image_picker/image_picker/example/ios/RunnerTests/PickerSaveImageToPathOperationTests.m +++ b/packages/image_picker/image_picker/example/ios/RunnerTests/PickerSaveImageToPathOperationTests.m @@ -55,6 +55,46 @@ - (void)testSaveGIFImage API_AVAILABLE(ios(14)) { [self verifySavingImageWithPickerResult:result]; } +- (void)testSaveTIFFImage API_AVAILABLE(ios(14)) { + NSURL *imageURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"tiffImage" + withExtension:@"tiff"]; + NSItemProvider *itemProvider = [[NSItemProvider alloc] initWithContentsOfURL:imageURL]; + PHPickerResult *result = [self createPickerResultWithProvider:itemProvider + withIdentifier:UTTypeWebP.identifier]; + + [self verifySavingImageWithPickerResult:result]; +} + +- (void)testSaveHEICImage API_AVAILABLE(ios(14)) { + NSURL *imageURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"heicImage" + withExtension:@"heic"]; + NSItemProvider *itemProvider = [[NSItemProvider alloc] initWithContentsOfURL:imageURL]; + PHPickerResult *result = [self createPickerResultWithProvider:itemProvider + withIdentifier:UTTypeWebP.identifier]; + + [self verifySavingImageWithPickerResult:result]; +} + +- (void)testSaveHEIFImage API_AVAILABLE(ios(14)) { + NSURL *imageURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"heifImage" + withExtension:@"heif"]; + NSItemProvider *itemProvider = [[NSItemProvider alloc] initWithContentsOfURL:imageURL]; + PHPickerResult *result = [self createPickerResultWithProvider:itemProvider + withIdentifier:UTTypeWebP.identifier]; + + [self verifySavingImageWithPickerResult:result]; +} + +- (void)testSaveRAWImage API_AVAILABLE(ios(14)) { + NSURL *imageURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"rawImage" + withExtension:@"raw"]; + NSItemProvider *itemProvider = [[NSItemProvider alloc] initWithContentsOfURL:imageURL]; + PHPickerResult *result = [self createPickerResultWithProvider:itemProvider + withIdentifier:UTTypeWebP.identifier]; + + [self verifySavingImageWithPickerResult:result]; +} + /** * Creates a mock picker result using NSItemProvider. * diff --git a/packages/image_picker/image_picker/example/ios/TestImages/heicImage.heic b/packages/image_picker/image_picker/example/ios/TestImages/heicImage.heic new file mode 100644 index 0000000000000000000000000000000000000000..1ab0bf086cf036e6fbdb338eb73002a13493a794 GIT binary patch literal 3092 zcmeHJ&1(}u6rV|IOrX?$iJz2ZTcp-@H?1fnG;J}lDmEfout&GElV;le7x5{Kx*BzyjUef3Kq2Vwj42qQv>Uy>2Z`u6u5icvy?>dks`1`k0XYND+o!0 z=P(#NmBi|I7$DepQUZ~Sp@@B++7?!iihU?O%=8&_ zp%JLqO2-z>3F%45|0*PNK@Kq2@*HM`ke?!%EpUZ^s7&c?P~QO)GPFy6|JmCk#NWmqkp06 zTVLPEmHx`(u{k(qQ23IAMCu040*^AwK)7h*gbyYX1fk6x_}u~~BquyKx~E<#LV=!i zHj53832C=37Uq$;doTUqVFm(4VY$&3R1iM)2F7E^APge1Qi~v$@cS^9dIQIxhuWr* z>_qMh*qQjUs#P)uR+evduMCFxA-^WjZW|w!~dlU@siM7?xDS zbeDM%bad;g5~T!dC3UHKT`9XBSI%pBEw4f~>{IbZWj?6|tEAS0Ko)hq(P(ImvzqIz z=#zy)LC;U=Q&SU=G2w4Gfe}tP{&1^9h5O7C5;s)Aj>fXP9+Xr#If5kXZs7WLSGJow zz7~Phm}~3pus*5f0dCtamOX9?X!P;5a>;d9EUxN+8UF+b8rAmK&nO-0OrSG?&ICFW q=uDt9f&Xs;`|l_2z@w=FuOobA^`4?{cYZ81hd=*Xea5cd-~9^$(&9D% literal 0 HcmV?d00001 diff --git a/packages/image_picker/image_picker/example/ios/TestImages/heifImage.heif b/packages/image_picker/image_picker/example/ios/TestImages/heifImage.heif new file mode 100644 index 0000000000000000000000000000000000000000..9f4669cdfba30327ce16712a344c1be9091badeb GIT binary patch literal 3138 zcmeGeO;6N7bY?5Mm=y`DLi`}LBEb*Z1%t`1EEun~;07}`acny{i!OdWck7w|30Y{^R6~*?X`KsCfd5x6Oc$sRHfb*YAxDLiS2^i0M2}Q*?6^ z9VGOCHYC!0x^)R`-4|#W`H!Lg;MvbFkM-pz>08O?;L@(sRdX$qUe@(TJy$#Q6{xU} z`+{L9fD~X7u+OX**cQq-$z2fzLg?lyeD44f(#kzI+(*0MHI5o7nZyKLT-aL+gmbst zP29WR0{R@UxZ$#OY#dVqrj7tTj&nvSaSrH1JXt8ML6r&QZOe#Ozq=FUosFFoi{vCo zNzy_)q8P|Q4-%|~`N!y?m>;Kokq^{bdChr6?ApyiyJV zk<+wlwW?OnsIE7o4P>)fEi)OMSHmV%)3vqOtPQ9cXg8K~1&>)A5`9{cFT3tcg(({JjDH9=jck1S z5xEJ?2{b3roIrB|%?UIo@c&I<`~Acmcr;bvb%f8VqrLR?>iT!9Ej`rxXU~%JW`1ny T#plIW@4uB^7AFrl@1FhzQNrkV literal 0 HcmV?d00001 diff --git a/packages/image_picker/image_picker/example/ios/TestImages/rawImage.raw b/packages/image_picker/image_picker/example/ios/TestImages/rawImage.raw new file mode 100644 index 0000000000000000000000000000000000000000..ff8c951f0853871baf97ddb291b9efacc7ee4df3 GIT binary patch literal 72 zcmWIYbaQiHU|JPNqi?2EuM(o5&Cc(s&eU?m4 z{K!f=Mt>*>Zu x#PNx1&#PVe<_+7ZX6=Ta3s1&}ISrfN;8eWL@zsSXWFt;ln6abVJpW&g{vXnrYA65z literal 0 HcmV?d00001 From 36da2b6ecb5029fecf10b7063b80193b52934b79 Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Wed, 23 Mar 2022 10:46:59 +0800 Subject: [PATCH 09/11] replace long process with processImage method --- .../FLTPHPickerSaveImageToPathOperation.m | 64 ++++--------------- 1 file changed, 13 insertions(+), 51 deletions(-) diff --git a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m index 4da8ff651d8e..469bab179e59 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m +++ b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m @@ -101,60 +101,22 @@ - (void)start { loadDataRepresentationForTypeIdentifier:identifier completionHandler:^(NSData *_Nullable data, NSError *_Nullable error) { - if (error == nil) { - __block UIImage *localImage = - [[UIImage alloc] initWithData:data]; - PHAsset *originalAsset = [FLTImagePickerPhotoAssetUtil - getAssetFromPHPickerResult:self.result]; - - if (self.maxWidth != (id)[NSNull null] || - self.maxHeight != (id)[NSNull null]) { - localImage = [FLTImagePickerImageUtil - scaledImage:localImage - maxWidth:self.maxWidth - maxHeight:self.maxHeight - isMetadataAvailable:originalAsset != nil]; - } - __block NSString *savedPath; - if (!originalAsset) { - // Image picked without an original asset (e.g. User pick - // image without permission) - savedPath = [FLTImagePickerPhotoAssetUtil - saveImageWithPickerInfo:nil - image:localImage - imageQuality:self.desiredImageQuality]; - [self completeOperationWithPath:savedPath]; - } else { - [[PHImageManager defaultManager] - requestImageDataForAsset:originalAsset - options:nil - resultHandler:^( - NSData *_Nullable imageData, - NSString *_Nullable dataUTI, - UIImageOrientation orientation, - NSDictionary *_Nullable info) { - // maxWidth and maxHeight are used only for - // GIF images. - savedPath = [FLTImagePickerPhotoAssetUtil - saveImageWithOriginalImageData: - imageData - image: - localImage - maxWidth: - self.maxWidth - maxHeight: - self.maxHeight - imageQuality: - self.desiredImageQuality]; - [self completeOperationWithPath:savedPath]; - }]; - } - } else { - [self completeOperationWithPath:nil]; - } + UIImage *image = [[UIImage alloc] initWithData:data]; + [self processImage:image]; }]; + return; } } + + [self.result.itemProvider + loadObjectOfClass:[UIImage class] + completionHandler:^(__kindof id _Nullable image, + NSError *_Nullable error) { + if ([image isKindOfClass:[UIImage class]]) { + [self processImage:image]; + } + }]; + } else { [self setFinished:YES]; } From d130454c418d77bb06859e71c6c147578117b83f Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Thu, 24 Mar 2022 09:55:44 +0800 Subject: [PATCH 10/11] specify what new formats support --- packages/image_picker/image_picker/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index 609a2a29b663..b37a26612fd1 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,7 +1,7 @@ ## 0.8.4+12 -* iOS:support images with different formats +* iOS:support images with heic,heif,raw,tiff formats. ## 0.8.4+11 From e584c96b758abb17f4fe6266611b57efe4aa2896 Mon Sep 17 00:00:00 2001 From: xiaoxiaowesley Date: Thu, 24 Mar 2022 09:58:07 +0800 Subject: [PATCH 11/11] revert blank line --- .../ios/Classes/FLTPHPickerSaveImageToPathOperation.m | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m index 469bab179e59..f7eddef55062 100644 --- a/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m +++ b/packages/image_picker/image_picker/ios/Classes/FLTPHPickerSaveImageToPathOperation.m @@ -116,7 +116,6 @@ - (void)start { [self processImage:image]; } }]; - } else { [self setFinished:YES]; }