update
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <AVFoundation/AVTime.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef NSString *DDWaterMarkInfoName NS_TYPED_EXTENSIBLE_ENUM;
|
||||
@@ -24,6 +26,8 @@ FOUNDATION_EXPORT DDWaterMarkInfoName const DDWaterMarkLayoutRight;
|
||||
*/
|
||||
+ (UIImage *)dd_thumbnailImageForVideo:(NSURL *)videoURL;
|
||||
|
||||
+ (void)dd_thumbnailImageForVideo:(NSURL *)videoURL completionHandler:(void (^)(UIImage * _Nullable image, CMTime actualTime, NSError * _Nullable error))handler;
|
||||
|
||||
/// @brief return a compressed image
|
||||
/// @param maxLength bytes = 1024 * (kb)
|
||||
- (UIImage *)dd_compressWithQulitySize:(NSInteger)maxLength;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#import "UIImage+DDCategory.h"
|
||||
#import <AVFoundation/AVAsset.h>
|
||||
#import <CoreMedia/CoreMedia.h>
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import <AVFoundation/AVAssetImageGenerator.h>
|
||||
|
||||
DDWaterMarkInfoName const DDWaterMarkInfoText = @"DDWaterMarkInfoText";
|
||||
DDWaterMarkInfoName const DDWaterMarkInfoAttributes = @"DDWaterMarkInfoAttributes";
|
||||
@@ -18,23 +18,45 @@ DDWaterMarkInfoName const DDWaterMarkLayoutRight = @"DDWaterMarkLayoutRight";
|
||||
|
||||
@implementation UIImage (DDCategory)
|
||||
+ (UIImage *)dd_thumbnailImageForVideo:(NSURL *)videoURL{
|
||||
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
|
||||
NSParameterAssert(asset);
|
||||
AVAssetImageGenerator *assetImageGenerator =[[AVAssetImageGenerator alloc] initWithAsset:asset];
|
||||
assetImageGenerator.appliesPreferredTrackTransform = YES;
|
||||
assetImageGenerator.apertureMode =AVAssetImageGeneratorApertureModeEncodedPixels;
|
||||
|
||||
CGImageRef thumbnailImageRef = NULL;
|
||||
// CFTimeInterval thumbnailImageTime = 1;
|
||||
NSError *thumbnailImageGenerationError = nil;
|
||||
thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:NULL error:&thumbnailImageGenerationError];
|
||||
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
|
||||
if (asset.duration.value == 0) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
NSAssert(thumbnailImageRef, @"thumbnailImageGenerationError");
|
||||
|
||||
UIImage *thumbnailImage = thumbnailImageRef ? [[UIImage alloc] initWithCGImage:thumbnailImageRef] : nil;
|
||||
return thumbnailImage;
|
||||
AVAssetImageGenerator *assetImageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
|
||||
assetImageGenerator.appliesPreferredTrackTransform = YES;
|
||||
assetImageGenerator.requestedTimeToleranceAfter = kCMTimeZero;
|
||||
assetImageGenerator.requestedTimeToleranceBefore = kCMTimeZero;
|
||||
|
||||
CGImageRef thumbnailImageRef = NULL;
|
||||
NSError *thumbnailImageGenerationError = nil;
|
||||
thumbnailImageRef = [assetImageGenerator copyCGImageAtTime:CMTimeMake(0, 600) actualTime:NULL error:&thumbnailImageGenerationError];
|
||||
|
||||
UIImage *thumbnailImage = thumbnailImageRef ? [[UIImage alloc] initWithCGImage:thumbnailImageRef] : nil;
|
||||
|
||||
return thumbnailImage;
|
||||
}
|
||||
|
||||
+ (void)dd_thumbnailImageForVideo:(NSURL *)videoURL completionHandler:(void (^)(UIImage * _Nullable image, CMTime actualTime, NSError * _Nullable error))handler {
|
||||
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
|
||||
if (asset.duration.value == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
AVAssetImageGenerator *assetImageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
|
||||
assetImageGenerator.appliesPreferredTrackTransform = YES;
|
||||
assetImageGenerator.requestedTimeToleranceAfter = kCMTimeZero;
|
||||
assetImageGenerator.requestedTimeToleranceBefore = kCMTimeZero;
|
||||
|
||||
[assetImageGenerator generateCGImagesAsynchronouslyForTimes:@[[NSValue valueWithCMTime:CMTimeMake(0, 600)]] completionHandler:^(CMTime requestedTime, CGImageRef _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) {
|
||||
UIImage *thumbnailImage = image ? [[UIImage alloc] initWithCGImage:image] : nil;
|
||||
|
||||
if (handler != nil) {
|
||||
handler(thumbnailImage,actualTime,error);
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (UIImage *)dd_compressWithQulitySize:(NSInteger)maxLength {
|
||||
// Compress by quality
|
||||
CGFloat compression = 1;
|
||||
|
||||
15
Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h
generated
Normal file
15
Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.h
generated
Normal file
@@ -0,0 +1,15 @@
|
||||
//
|
||||
// UISwitch+DDCategory.h
|
||||
// DDCategoryKit_Private
|
||||
// Created by DDIsFriend on 2023/8/30.
|
||||
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface UISwitch (DDCategory)
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
11
Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.m
generated
Normal file
11
Pods/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UISwitch+DDCategory/UISwitch+DDCategory.m
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
//
|
||||
// UISwitch+DDCategory.m
|
||||
// DDCategoryKit_Private
|
||||
// Created by DDIsFriend on 2023/8/30.
|
||||
|
||||
|
||||
#import "UISwitch+DDCategory.h"
|
||||
|
||||
@implementation UISwitch (DDCategory)
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user