图片

作者: FredYJH | 来源:发表于2017-04-21 14:31 被阅读23次

1、压缩:
// 第一种
- (UIImage *)scaleImage:(UIImage *)image size:(CGSize)imageSize {
UIGraphicsBeginImageContext(imageSize);
[image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}

// 第二种
- (void)imageDataLoad{
NSData *pngData = UIImagePNGRepresentation(self.pngImage);
[self.pngImageview setImage:[UIImage imageWithData:pngData]];
}

2、图片过滤
- (UIImage *)filter{
// 获取各种参数
CGImageRef imageRef = self.pngImage.CGImage;
size_t width = CGImageGetWidth(imageRef);
size_t height = CGImageGetHeight(imageRef);
size_t bits = CGImageGetBitsPerComponent(imageRef);
size_t bitsPreRow = CGImageGetBytesPerRow(imageRef);
CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef);
int alphaInfo = CGImageGetAlphaInfo(imageRef);

    CGDataProviderRef provideRef = CGImageGetDataProvider(imageRef);
    CFDataRef dataRef = CGDataProviderCopyData(provideRef);
    
    int length = (int)CFDataGetLength(dataRef);
    
    
    UInt8 *pixelBuf = CFDataGetMutableBytePtr((CFMutableDataRef)dataRef);
    for (int i = 0; i < length; i+=4) {
        [self yjhImageFilterFormBuf:pixelBuf offset:i];
    }
    CGContextRef contextRef = CGBitmapContextCreate(pixelBuf, width, height, bits, bitsPreRow, colorSpace, alphaInfo);
    CGImageRef backImageRef = CGBitmapContextCreateImage(contextRef);
    UIImage *backImage = [UIImage imageWithCGImage:backImageRef scale:[UIScreen mainScreen].scale orientation:self.pngImage.imageOrientation];
    CFRelease(dataRef);
    CFRelease(contextRef);
    CFRelease(backImageRef);
    return backImage;
}
// 像素点处理
- (void)yjhImageFilterFormBuf:(UInt8*)pixeBuf offset:(int)offset{
    int offsetR = offset;
    int offsetG = offset + 1;
    int offsetB = offset + 2;
    int red = pixeBuf[offsetR];
    int green = pixeBuf[offsetG];
    int blue = pixeBuf[offsetB];

    pixeBuf[offsetB] = red * 0.3;
    pixeBuf[offsetG] = green * 0.3;
    pixeBuf[offsetB] = blue * 0.3;

}

3、 截屏

// 图片放到view
- (UIImage *)imageFromView:(UIView *)view {
    
    UIGraphicsBeginImageContext(view.frame.size);
    // 获取上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 渲染到view
    [view.layer renderInContext:context];
    // 把上下文生成图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    newImage = [self getSubImage:CGRectMake(100, 100, 100, 100) image:newImage.CGImage];
    UIGraphicsEndImageContext();
    return newImage;
}

- (UIImage *)getSubImage:(CGRect)rect image:(CGImageRef)cgImage {
    CGImageRef imageRef = CGImageCreateWithImageInRect(cgImage, rect);
    UIImage *subImage = [UIImage imageWithCGImage:imageRef];
    return subImage;
}
// 传入一张图片进行裁剪
- (UIImage *)circleImage:(UIImage *)image {
    // 图片编辑开始
    UIGraphicsBeginImageContext(CGSizeMake(200, 200));
    // 获取上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 1);
    CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
    CGContextAddEllipseInRect(context, CGRectMake(0, 0, 200, 200));
    // 裁剪
    CGContextClip(context);
    [image drawInRect:CGRectMake(0, 0, 200, 200)];
    // 图片编辑结束
    UIGraphicsEndImageContext();
    return image;
}

相关文章

网友评论

      本文标题:图片

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