iOS image 在项目中的基本应用小记

一、 为图片增加图层   此类使用Categorie

/**
 * @brief  为图像增加颜色覆盖.
 *
 * @param  color    图层的颜色
 * @param  level    图层颜色的透明度  0 - 1 图层越来越深
 *
 * @return UIImage  增加图层后的图像.
 */
-(UIImage *)imageWithColor:(UIColor*)color level:(CGFloat)level;

方法实现:

-(UIImage*)imageWithColor:(UIColor*)color level:(CGFloat)level
{
    CGRect imageRect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);
    
    UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, self.scale);
    
    [self drawInRect:imageRect];
    
    // 获取绘画的上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 填充色
    CGContextSetFillColorWithColor(ctx, [color CGColor]);
    
    // 填充色的透明度
    CGContextSetAlpha(ctx, level);
    
    // 混合模式使图片和绘制的颜色混合
    CGContextSetBlendMode(ctx, kCGBlendModeSourceAtop);
    
    // 填充的矩形大小
    CGContextFillRect(ctx, imageRect);
    
    CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
    
    UIImage *handleImage = [UIImage imageWithCGImage:imageRef
                                             scale:self.scale
                                       orientation:self.imageOrientation];
    CGImageRelease(imageRef);
    
    UIGraphicsEndImageContext();
    
    return handleImage;
}

二、使用coreImage 来生产模糊效果

/**
 * @brief  生成模糊效果的图<span style="font-family: Arial, Helvetica, sans-serif;">像</span><span style="font-family: Arial, Helvetica, sans-serif;">.</span>
 *
 * @param  sourceImage 需要处理的图<span style="font-family: Arial, Helvetica, sans-serif;">像</span>
 * @param  blurFloat   模糊系数  范围 0 - 无穷 值越大越模糊 越来越白
 *
 * @return UIImage     处理后的图像
 */
-(UIImage *)blurImage:(UIImage *)sourceImage blurFloat:(float)blurFloat
{
    // 创建coreImage上下文
    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *souImage = [CIImage imageWithCGImage:sourceImage.CGImage];
    
    // 初始化高斯模糊过滤器
    CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
    
    // 把需要处理的图片放入过滤器中
    [blurFilter setValue:souImage forKeyPath:kCIInputImageKey];
    
    // 设置模糊的值
    [blurFilter setValue:@(blurFloat) forKeyPath:@"inputRadius"];
    
    // 从滤器中中取出
    CIImage *blurImage = [blurFilter valueForKey:kCIOutputImageKey];
    
    // 生成<span style="color: rgb(61, 29, 129); font-family: Arial, Helvetica, sans-serif;">图像</span>并释放内存
    CGImageRef cgImage = [context createCGImage:blurImage fromRect:[souImage extent]];
    UIImage *bluredImage = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    
    return bluredImage;
}

三、图片转换成其他格式

    // img 为需要转换的图像
    NSData   *data   = UIImagePNGRepresentation(img);
    NSString *imgStr = [data base64Encoding];


四、把图片保存到相册

 UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

// 保存到相册后回调
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
    if (error){
       // 成功
    }else
    {
       // 失败
    }
}

五、图像的圆角处理

/**
 * @brief  处理图像的圆角.
 *
 * @param  image        所要绘制圆角的图像
 * @param  cornerRadius 圆角大小  0 为正圆 值越大圆角越小
 *
 * @return UIImage      圆角处理后的图像.
 */
-(UIImage *) circleImage:(UIImage*) image withParam:(CGFloat) cornerRadius
{
    // 开始绘制图像上下文
    UIGraphicsBeginImageContext(image.size);
    
    // 获取图像上下文
	CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2);
    
    // 绘制颜色
    CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
    
    // 绘制所需的矩形
	CGRect rect = CGRectMake(cornerRadius, cornerRadius, image.size.width - cornerRadius * 2.0f, image.size.height - cornerRadius * 2.0f);
    
    // 在矩形中绘制椭圆
	CGContextAddEllipseInRect(context, rect);
    
    // 裁剪
	CGContextClip(context);
	
    // 绘画裁剪后的图像
	[image drawInRect:rect];
    
    // 关闭画笔路径
	CGContextStrokePath(context);
    
    // 从图像的上下文中获取图片
    UIImage *newimg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newimg;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值