增加换肤功能
This commit is contained in:
139
QXLive/Tools/Category/UIImage+QX.m
Normal file
139
QXLive/Tools/Category/UIImage+QX.m
Normal file
@@ -0,0 +1,139 @@
|
||||
//
|
||||
// UIImage+QX.m
|
||||
// QXLive
|
||||
//
|
||||
// Created by 启星 on 2025/4/28.
|
||||
//
|
||||
|
||||
#import "UIImage+QX.h"
|
||||
|
||||
@implementation UIImage (QX)
|
||||
// 指定尺寸 进行图片压缩
|
||||
- (NSData *)qx_compressImageQualityWithToByte:(NSInteger)maxLength {
|
||||
CGFloat compression = 1;
|
||||
NSData *data = UIImageJPEGRepresentation(self, compression);
|
||||
if (data.length <= maxLength) {
|
||||
return data;
|
||||
}
|
||||
compression = (CGFloat)maxLength / data.length;
|
||||
return UIImageJPEGRepresentation(self, compression);
|
||||
}
|
||||
|
||||
+ (UIImage *)qx_convertViewToImageWith:(UIView *)view {
|
||||
//UIGraphicsBeginImageContextWithOptions(区域大小, 是否是非透明的, 屏幕密度);
|
||||
UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, [UIScreen mainScreen].scale);
|
||||
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
|
||||
UIImage *imageRet = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return imageRet;
|
||||
}
|
||||
|
||||
+ (UIImage *)qx_imageWithColor:(UIColor *)color {
|
||||
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
|
||||
UIGraphicsBeginImageContext(rect.size);
|
||||
CGContextRef context = UIGraphicsGetCurrentContext();
|
||||
|
||||
CGContextSetFillColorWithColor(context, [color CGColor]);
|
||||
CGContextFillRect(context, rect);
|
||||
|
||||
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
+ (UIImage *)qx_gradientColorImageFromColors:(NSArray *)colors gradientType:(GradientType)gradientType imgSize:(CGSize)imgSize {
|
||||
NSMutableArray *ar = [NSMutableArray array];
|
||||
for (UIColor *c in colors) {
|
||||
[ar addObject:(id)c.CGColor];
|
||||
}
|
||||
|
||||
UIGraphicsBeginImageContextWithOptions(imgSize, YES, 1);
|
||||
CGContextRef context = UIGraphicsGetCurrentContext();
|
||||
CGContextSaveGState(context);
|
||||
CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]);
|
||||
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)ar, NULL);
|
||||
CGPoint start;
|
||||
CGPoint end;
|
||||
|
||||
switch (gradientType) {
|
||||
case GradientTypeTopToBottom:
|
||||
start = CGPointMake(0.0, 0.0);
|
||||
end = CGPointMake(0.0, imgSize.height);
|
||||
break;
|
||||
case GradientTypeLeftToRight:
|
||||
start = CGPointMake(0.0, 0.0);
|
||||
end = CGPointMake(imgSize.width, 0.0);
|
||||
break;
|
||||
case GradientTypeUpleftToLowright:
|
||||
start = CGPointMake(0.0, 0.0);
|
||||
end = CGPointMake(imgSize.width, imgSize.height);
|
||||
break;
|
||||
case GradientTypeUprightToLowleft:
|
||||
start = CGPointMake(imgSize.width, 0.0);
|
||||
end = CGPointMake(0.0, imgSize.height);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
|
||||
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
|
||||
CGGradientRelease(gradient);
|
||||
CGContextRestoreGState(context);
|
||||
CGColorSpaceRelease(colorSpace);
|
||||
UIGraphicsEndImageContext();
|
||||
return image;
|
||||
}
|
||||
|
||||
- (instancetype)qx_imageFitWithSize:(CGSize)size fillColor:(UIColor *)fillColor {
|
||||
UIGraphicsBeginImageContextWithOptions(size, YES, 0);
|
||||
CGRect rect = (CGRect) { CGPointZero, size };
|
||||
[fillColor setFill];
|
||||
UIRectFill(rect);
|
||||
[self drawInRect:rect];
|
||||
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
return image;
|
||||
}
|
||||
|
||||
- (instancetype)qx_imageCornerWithRadius:(CGFloat)radius byRoundingCorners:(UIRectCorner)corners fillColor:(UIColor *)fillColor zoomSize:(CGSize)zoomSize {
|
||||
UIGraphicsBeginImageContextWithOptions(zoomSize, YES, 0);
|
||||
CGRect rect = (CGRect) { CGPointZero, zoomSize };
|
||||
[fillColor setFill];
|
||||
UIRectFill(rect);
|
||||
CGSize size = CGSizeMake(radius, radius);
|
||||
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corners cornerRadii:size];
|
||||
[path addClip];
|
||||
[self drawInRect:rect];
|
||||
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
|
||||
return img;
|
||||
}
|
||||
|
||||
- (instancetype)qx_imageCornerWithRadius:(CGFloat)radius fillColor:(UIColor *)fillColor zoomSize:(CGSize)zoomSize {
|
||||
return [self qx_imageCornerWithRadius:radius byRoundingCorners:UIRectCornerAllCorners fillColor:fillColor zoomSize:zoomSize];
|
||||
}
|
||||
|
||||
+ (instancetype)qx_getAppLauchImage {
|
||||
CGSize viewSize = [UIScreen mainScreen].bounds.size;
|
||||
NSString *viewOrienttation = @"Portrait";
|
||||
NSString *launchImage = nil;
|
||||
NSArray *imageDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
|
||||
for (NSDictionary *dict in imageDict) {
|
||||
if (launchImage) {
|
||||
return [UIImage imageNamed:launchImage];
|
||||
}
|
||||
|
||||
CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
|
||||
if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrienttation isEqualToString:dict[@"UILaunchImageOrientation"]]) {
|
||||
launchImage = dict[@"UILaunchImageName"];
|
||||
}
|
||||
}
|
||||
if (!launchImage) {
|
||||
// 取不到就直接取,6s的
|
||||
return [UIImage imageNamed:@"LaunchImage-800-667h"];
|
||||
}
|
||||
return [UIImage imageNamed:launchImage];
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user