This commit is contained in:
DDIsFriend
2023-08-31 14:43:53 +08:00
parent 3fc94fcee1
commit 2cd605ad2b
109 changed files with 8314 additions and 8769 deletions

View File

@@ -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;

View File

@@ -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;

View 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

View 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