UIImage+Category常用分类方法

2020-12-14  本文已影响0人  文子飞_
生成二维码
@implementation UIImage (createImage)
// 获取截屏生成image
+ (UIImage *)getScreenShot:(CGRect)rect ofView:(UIView *)view {
    
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);

    if (@available(iOS 9.0, *)) {
        
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
        
    } else if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
        
        BOOL isComplate = [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
        NSLog(@">>>>>>>>>>>>>>>>%@", isComplate?@"YES":@"NO");
    } else {
        
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    }
    
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

// 生成二维码
+ (UIImage *)createQRCodeImageWithString:(NSString *)qrString {
    @autoreleasepool {
        // Need to convert the string to a UTF-8 encoded NSData object
        NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];
        // Create the filter
        CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        // Set the message content and error-correction level
        [qrFilter setValue:stringData forKey:@"inputMessage"];
        [qrFilter setValue:@"M" forKey:@"inputCorrectionLevel"];
        // Send the image back
        CIImage* image = qrFilter.outputImage;
        
        CGFloat size = 250.0f;
        CGRect extent = CGRectIntegral(image.extent);
        CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
        // create a bitmap image that we'll draw into a bitmap context at the desired size;
        size_t width = CGRectGetWidth(extent) * scale;
        size_t height = CGRectGetHeight(extent) * scale;
        CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
        CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
        CIContext *context = [CIContext contextWithOptions:nil];
        CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
        CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
        CGContextScaleCTM(bitmapRef, scale, scale);
        CGContextDrawImage(bitmapRef, extent, bitmapImage);
        // Create an image with the contents of our bitmap
        CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
        UIImage *resultImage = [UIImage imageWithCGImage:scaledImage];
        // Cleanup
        CGContextRelease(bitmapRef);
        CGImageRelease(bitmapImage);
        CGColorSpaceRelease(cs);
        CGImageRelease(scaledImage);
        return resultImage;
    }
}

// 将颜色生成图片
+ (UIImage *)createImageWithColor:(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 *theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return theImage;
}

@end
修改图标颜色
@implementation UIImage (RenderColor)

- (UIImage*)imageChangeColor:(UIColor*)color {
    //获取画布
    UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);
    //画笔沾取颜色
    [color setFill];
    
    CGRect bounds = CGRectMake(0, 0, self.size.width, self.size.height);
    UIRectFill(bounds);
    //绘制一次
    [self drawInRect:bounds blendMode:kCGBlendModeOverlay alpha:1.0f];
    //再绘制一次
    [self drawInRect:bounds blendMode:kCGBlendModeDestinationIn alpha:1.0f];
    //获取图片
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

@end
上一篇下一篇

猜你喜欢

热点阅读