From 92623ef7abdd4e1886736ca23646258e2c120112 Mon Sep 17 00:00:00 2001 From: Chris Yang Date: Mon, 8 Jul 2019 09:39:30 -0700 Subject: [PATCH] use class instead of struct for GIFInfo on iOS --- packages/image_picker/CHANGELOG.md | 4 +++ .../ImageUtilTests.m | 2 +- .../ios/Classes/FLTImagePickerImageUtil.h | 19 +++++++----- .../ios/Classes/FLTImagePickerImageUtil.m | 31 +++++++++++++++---- .../Classes/FLTImagePickerPhotoAssetUtil.m | 12 +++---- packages/image_picker/pubspec.yaml | 2 +- 6 files changed, 48 insertions(+), 22 deletions(-) diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index 7814f393927d..145fd4995a8e 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.0+12 + +* Use class instead of struct for `GIFInfo` in iOS implementation. + ## 0.6.0+11 * Don't use module imports. diff --git a/packages/image_picker/example/ios/image_picker_exampleTests/ImageUtilTests.m b/packages/image_picker/example/ios/image_picker_exampleTests/ImageUtilTests.m index b554f4d02e05..f59c942ea7cb 100644 --- a/packages/image_picker/example/ios/image_picker_exampleTests/ImageUtilTests.m +++ b/packages/image_picker/example/ios/image_picker_exampleTests/ImageUtilTests.m @@ -31,7 +31,7 @@ - (void)testScaledGIFImage_ShouldBeScaled { // gif image that frame size is 3 and the duration is 1 second. NSData *data = [NSData dataWithContentsOfFile:[self.testBundle pathForResource:@"gifImage" ofType:@"gif"]]; - GIFInfo info = [FLTImagePickerImageUtil scaledGIFImage:data maxWidth:@3 maxHeight:@2]; + GIFInfo *info = [FLTImagePickerImageUtil scaledGIFImage:data maxWidth:@3 maxHeight:@2]; NSArray *images = info.images; NSTimeInterval duration = info.interval; diff --git a/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.h b/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.h index d9abec84bf52..0983f1fad6b8 100644 --- a/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.h +++ b/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.h @@ -7,11 +7,14 @@ NS_ASSUME_NONNULL_BEGIN -typedef struct GIFInfo { - // frames of animation - NSArray *images; - NSTimeInterval interval; -} GIFInfo; +@interface GIFInfo : NSObject + +@property(strong, nonatomic, readonly) NSArray *images; +@property(assign, nonatomic, readonly) NSTimeInterval interval; + +- (instancetype)initWithImages:(NSArray *)images interval:(NSTimeInterval)interval; + +@end @interface FLTImagePickerImageUtil : NSObject @@ -20,9 +23,9 @@ typedef struct GIFInfo { maxHeight:(NSNumber *)maxHeight; // Resize all gif animation frames. -+ (GIFInfo)scaledGIFImage:(NSData *)data - maxWidth:(NSNumber *)maxWidth - maxHeight:(NSNumber *)maxHeight; ++ (GIFInfo *)scaledGIFImage:(NSData *)data + maxWidth:(NSNumber *)maxWidth + maxHeight:(NSNumber *)maxHeight; @end diff --git a/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m b/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m index cd4d1ad489b8..2e57caf4b54f 100644 --- a/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m +++ b/packages/image_picker/ios/Classes/FLTImagePickerImageUtil.m @@ -5,6 +5,27 @@ #import "FLTImagePickerImageUtil.h" #import +@interface GIFInfo () + +@property(strong, nonatomic, readwrite) NSArray *images; +@property(assign, nonatomic, readwrite) NSTimeInterval interval; + +@end + +@implementation GIFInfo + +- (instancetype)initWithImages:(NSArray *)images interval:(NSTimeInterval)interval; +{ + self = [super init]; + if (self) { + self.images = images; + self.interval = interval; + } + return self; +} + +@end + @implementation FLTImagePickerImageUtil : NSObject + (UIImage *)scaledImage:(UIImage *)image @@ -57,9 +78,9 @@ + (UIImage *)scaledImage:(UIImage *)image return scaledImage; } -+ (GIFInfo)scaledGIFImage:(NSData *)data - maxWidth:(NSNumber *)maxWidth - maxHeight:(NSNumber *)maxHeight { ++ (GIFInfo *)scaledGIFImage:(NSData *)data + maxWidth:(NSNumber *)maxWidth + maxHeight:(NSNumber *)maxHeight { NSMutableDictionary *options = [NSMutableDictionary dictionary]; options[(NSString *)kCGImageSourceShouldCache] = @(YES); options[(NSString *)kCGImageSourceTypeIdentifierHint] = (NSString *)kUTTypeGIF; @@ -98,9 +119,7 @@ + (GIFInfo)scaledGIFImage:(NSData *)data CFRelease(imageSource); - GIFInfo info; - info.images = images; - info.interval = interval; + GIFInfo *info = [[GIFInfo alloc] initWithImages:images interval:interval]; return info; } diff --git a/packages/image_picker/ios/Classes/FLTImagePickerPhotoAssetUtil.m b/packages/image_picker/ios/Classes/FLTImagePickerPhotoAssetUtil.m index 80563e292943..c73bc11a53c2 100644 --- a/packages/image_picker/ios/Classes/FLTImagePickerPhotoAssetUtil.m +++ b/packages/image_picker/ios/Classes/FLTImagePickerPhotoAssetUtil.m @@ -6,7 +6,7 @@ #import "FLTImagePickerImageUtil.h" #import "FLTImagePickerMetaDataUtil.h" -#import ; +#import @implementation FLTImagePickerPhotoAssetUtil @@ -35,9 +35,9 @@ + (NSString *)saveImageWithOriginalImageData:(NSData *)originalImageData metaData = [FLTImagePickerMetaDataUtil getMetaDataFromImageData:originalImageData]; } if (type == FLTImagePickerMIMETypeGIF) { - GIFInfo gifInfo = [FLTImagePickerImageUtil scaledGIFImage:originalImageData - maxWidth:maxWidth - maxHeight:maxHeight]; + GIFInfo *gifInfo = [FLTImagePickerImageUtil scaledGIFImage:originalImageData + maxWidth:maxWidth + maxHeight:maxHeight]; return [self saveImageWithMetaData:metaData gifInfo:gifInfo suffix:suffix]; } else { @@ -54,7 +54,7 @@ + (NSString *)saveImageWithPickerInfo:(nullable NSDictionary *)info image:(UIIma } + (NSString *)saveImageWithMetaData:(NSDictionary *)metaData - gifInfo:(GIFInfo)gifInfo + gifInfo:(GIFInfo *)gifInfo suffix:(NSString *)suffix { NSString *path = [self temporaryFilePath:suffix]; return [self saveImageWithMetaData:metaData gifInfo:gifInfo path:path]; @@ -82,7 +82,7 @@ + (NSString *)saveImageWithMetaData:(NSDictionary *)metaData } + (NSString *)saveImageWithMetaData:(NSDictionary *)metaData - gifInfo:(GIFInfo)gifInfo + gifInfo:(GIFInfo *)gifInfo path:(NSString *)path { CGImageDestinationRef destination = CGImageDestinationCreateWithURL( (CFURLRef)[NSURL fileURLWithPath:path], kUTTypeGIF, gifInfo.images.count, NULL); diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index f97340972639..4d4027156d91 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -5,7 +5,7 @@ authors: - Flutter Team - Rhodes Davis Jr. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.6.0+11 +version: 0.6.0+12 flutter: plugin: