zoukankan      html  css  js  c++  java
  • OC 使用CIFilter添加图片

    +(UIImage *)createInviteImgWithUserCodeStr:(NSString *)userCode{
        userCode = [NSString stringWithFormat:@"https://v.16mnc.cn:9999/neighbour-goods/inviteRegist.html?userCode=%@",userCode];
        NSString *imagePath = [PublicService getDirectoryWithFile:userCode];
        NSFileManager *fm = [NSFileManager defaultManager];
        if([fm fileExistsAtPath:imagePath]){
            return [UIImage imageWithContentsOfFile:imagePath];
        }
        
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        [filter setDefaults];
        NSData *data = [userCode dataUsingEncoding:NSUTF8StringEncoding];
        [filter setValue:data forKey:@"inputMessage"];              //通过kvo方式给一个字符串,生成二维码
        [filter setValue:@"H" forKey:@"inputCorrectionLevel"];      //设置二维码的纠错水平,纠错水平越高,可以污损的范围越大
        
        //设置背景颜色和填充颜色 默认白色背景黑色填充
        
        CIColor *color1 = [CIColor colorWithCGColor:[UIColor blackColor].CGColor];
        CIColor *color2 = [CIColor colorWithCGColor:[UIColor whiteColor].CGColor];
        NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys: filter.outputImage ,@"inputImage",
                                    color1,@"inputColor0",
                                    color2,@"inputColor1",nil];
        CIFilter *newFilter = [CIFilter filterWithName:@"CIFalseColor" withInputParameters:parameters];
        UIImage *img = [PublicService createNonInterpolatedUIImageFormCIImage:[newFilter outputImage] withSize:SCREEN_WIDTH];
        
        
        
        //把图片直接保存到指定的路径(同时应该把图片的路径imagePath存起来,下次就可以直接用来取)
        [UIImagePNGRepresentation(img) writeToFile:imagePath atomically:YES];
        
        return img;
    }
    
    
    /**
     * 调用该方法处理图像变清晰
     * 根据CIImage生成指定大小的UIImage
     *
     * @param image CIImage
     * @param size 图片宽度以及高度
     */
    + (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {
        CGRect extent = CGRectIntegral(image.extent);
        CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
        // 1.创建bitmap;
        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);
        // 2.保存bitmap到图片
        CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
        CGContextRelease(bitmapRef);
        CGImageRelease(bitmapImage);
        //原图
        UIImage *outputImage = [UIImage imageWithCGImage:scaledImage];
        UIGraphicsBeginImageContextWithOptions(outputImage.size, NO, [[UIScreen mainScreen] scale]);
        [outputImage drawInRect:CGRectMake(0,0 , size, size)];
        //水印图
        UIImage *waterimage = [UIImage imageNamed:@"icon"];
        [waterimage drawInRect:CGRectMake((outputImage.size.height-(outputImage.size.height)*0.3)*0.5, (outputImage.size.height-(outputImage.size.height)*0.3)*0.5, (outputImage.size.height)*0.3, (outputImage.size.height)*0.3)];
        UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newPic;
    }
    
  • 相关阅读:
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    PHP extract() 函数
    PHP end() 函数
    PHP each() 函数
    PHP current() 函数
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/10627071.html
Copyright © 2011-2022 走看看