美文网首页
UIImage+Category常用分类方法

UIImage+Category常用分类方法

作者: 文子飞_ | 来源:发表于2020-12-14 16:05 被阅读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
    

    相关文章

      网友评论

          本文标题:UIImage+Category常用分类方法

          本文链接:https://www.haomeiwen.com/subject/npwvgktx.html