This commit is contained in:
启星
2025-08-08 10:49:36 +08:00
parent 6400cf78bb
commit b5ce3d580a
8780 changed files with 978183 additions and 0 deletions

View File

@@ -0,0 +1,135 @@
// Copyright (c) 2024 Tencent. All rights reserved.
// Author: eddardliu
#import "TUIMultimediaImageUtil.h"
@implementation TUIMultimediaImageUtil
+ (UIImage *)imageFromView:(UIView *)view {
UIGraphicsBeginImageContext(view.bounds.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[view.layer renderInContext:ctx];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
+ (UIImage *)imageFromView:(UIView *)view withRotate:(CGFloat)rotate {
// view--
CGSize finalSize = CGSizeMake(CGRectGetWidth(view.frame), CGRectGetHeight(view.frame));
// view
CGSize originSize = CGSizeMake(CGRectGetWidth(view.bounds), CGRectGetHeight(view.bounds));
UIGraphicsBeginImageContext(finalSize);
CGContextRef ctx = UIGraphicsGetCurrentContext();
//
CGContextTranslateCTM(ctx, finalSize.width / 2, finalSize.height / 2);
//
CGContextRotateCTM(ctx, rotate);
// view
CGContextTranslateCTM(ctx, -originSize.width / 2, -originSize.height / 2);
[view.layer renderInContext:ctx];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
+ (UIImage *)simpleImageFromImage:(UIImage *)img withTintColor:(UIColor *)tintColor {
// We want to keep alpha, set opaque to NO; Use 0.0f for scale to use the scale factor of the
// devices main screen.
UIGraphicsBeginImageContextWithOptions(img.size, NO, 0.0f);
[tintColor setFill];
CGRect bounds = CGRectMake(0, 0, img.size.width, img.size.height);
UIRectFill(bounds);
// Draw the tinted image in context
[img drawInRect:bounds blendMode:kCGBlendModeDestinationIn alpha:1.0f];
UIImage *tintedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return tintedImage;
}
+ (UIImage *)imageFromImage:(UIImage *)img withTintColor:(UIColor *)tintColor {
UIImage *imgWithTintColor = [self simpleImageFromImage:img withTintColor:tintColor];
if (img.imageAsset == nil) {
return imgWithTintColor;
}
UITraitCollection *const scaleTraitCollection = [UITraitCollection currentTraitCollection];
UITraitCollection *const darkUnscaledTraitCollection = [UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark];
UITraitCollection *const darkScaledTraitCollection =
[UITraitCollection traitCollectionWithTraitsFromCollections:@[ scaleTraitCollection, darkUnscaledTraitCollection ]];
UIImage *imageDark = [img.imageAsset imageWithTraitCollection:darkScaledTraitCollection];
if (img != imageDark) {
[imgWithTintColor.imageAsset registerImage:[self simpleImageFromImage:imageDark withTintColor:tintColor] withTraitCollection:darkScaledTraitCollection];
}
return imgWithTintColor;
}
+ (UIImage *)resizeImage:(UIImage *)img toSize:(CGSize)size {
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:size];
return [renderer imageWithActions:^(UIGraphicsImageRendererContext *_Nonnull rendererContext) {
[img drawInRect:CGRectMake(0, 0, size.width, size.height)];
}];
}
+ (UIImage *)rotateImage:(UIImage *)image angle:(float)angle {
CGFloat radians = angle * (M_PI / 180.0);
CGSize size = image.size;
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:size];
UIImage *rotatedImage = [renderer imageWithActions:^(UIGraphicsImageRendererContext *context) {
CGContextRef cgContext = context.CGContext;
CGContextTranslateCTM(cgContext, size.width / 2, size.height / 2);
CGContextRotateCTM(cgContext, radians);
CGContextTranslateCTM(cgContext, -size.width / 2, -size.height / 2);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
}];
return rotatedImage;
}
+ (UIImage *)imageWithColor:(UIColor *)color {
return [self imageWithColor:color size:CGSizeMake(1, 1)];
}
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size {
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:size];
return [renderer imageWithActions:^(UIGraphicsImageRendererContext *_Nonnull rendererContext) {
[color set];
[rendererContext fillRect:CGRectMake(0, 0, size.width, size.height)];
}];
}
+ (UIImage *)createBlueCircleWithWhiteBorder : (CGSize)size withColor:(UIColor*) color{
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
if (!context) return nil;
CGContextSetFillColorWithColor(context, [UIColor yellowColor].CGColor);
CGFloat centerX = size.width / 2;
CGFloat centerY = size.width / 2;
CGFloat radius = size.width / 2;
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
CGContextSetLineWidth(context, 0);
CGContextAddArc(context, centerX, centerY, radius, 0, 2 * M_PI, 0);
CGContextDrawPath(context, kCGPathFillStroke);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextSetLineWidth(context, 0);
CGContextAddArc(context, centerX, centerY, 5, 0, 2 * M_PI, 0);
CGContextDrawPath(context, kCGPathFillStroke);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end