美文网首页
iOS开发中 UIImageView相关的小知识点

iOS开发中 UIImageView相关的小知识点

作者: 艾欧艾斯开花攻城狮 | 来源:发表于2017-06-27 10:43 被阅读48次

    1、给一个view截图

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);

    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    2、颜色转图片

    + (UIImage *)cl_imageWithColor:(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 *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    returnimage;

    }

    3、判断图片类型

    //通过图片Data数据第一个字节 来获取图片扩展名

    - (NSString *)contentTypeForImageData:(NSData *)data

    {

    uint8_t c;

    [data getBytes:&c length:1];

    switch(c)

    {

    case0xFF:

    return@"jpeg";

    case0x89:

    return@"png";

    case0x47:

    return@"gif";

    case0x49:

    case0x4D:

    return@"tiff";

    case0x52:

    if([data length] < 12) {

    returnnil;

    }

    NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];

    if([testString hasPrefix:@"RIFF"]

    && [testString hasSuffix:@"WEBP"])

    {

    return@"webp";

    }

    returnnil;

    }

    returnnil;

    }

    4、image圆角

    - (UIImage *)circleImage

    {

    // NO代表透明

    UIGraphicsBeginImageContextWithOptions(self.size, NO, 1);

    // 获得上下文

    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // 添加一个圆

    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);

    // 方形变圆形

    CGContextAddEllipseInRect(ctx, rect);

    // 裁剪

    CGContextClip(ctx);

    // 将图片画上去

    [self drawInRect:rect];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    returnimage;

    }

    5、image拉伸

    + (UIImage *)resizableImage:(NSString *)imageName

    {

    UIImage *image = [UIImage imageNamed:imageName];

    CGFloat imageW = image.size.width;

    CGFloat imageH = image.size.height;

    return[image resizableImageWithCapInsets:UIEdgeInsetsMake(imageH * 0.5, imageW * 0.5, imageH * 0.5, imageW * 0.5) resizingMode:UIImageResizingModeStretch];

    }

    6、取图片某一点的颜色

    if(point.x < 0 || point.y < 0)returnnil;

    CGImageRef imageRef = self.CGImage;

    NSUInteger width = CGImageGetWidth(imageRef);

    NSUInteger height = CGImageGetHeight(imageRef);

    if(point.x >= width || point.y >= height)returnnil;

    unsigned char *rawData = malloc(height * width * 4);

    if(!rawData)returnnil;

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    NSUInteger bytesPerPixel = 4;

    NSUInteger bytesPerRow = bytesPerPixel * width;

    NSUInteger bitsPerComponent = 8;

    CGContextRef context = CGBitmapContextCreate(rawData,

    width,

    height,

    bitsPerComponent,

    bytesPerRow,

    colorSpace,

    kCGImageAlphaPremultipliedLast

    | kCGBitmapByteOrder32Big);

    if(!context) {

    free(rawData);

    returnnil;

    }

    CGColorSpaceRelease(colorSpace);

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);

    CGContextRelease(context);

    int byteIndex = (bytesPerRow * point.y) + point.x * bytesPerPixel;

    CGFloat red   = (rawData[byteIndex]     * 1.0) / 255.0;

    CGFloat green = (rawData[byteIndex + 1] * 1.0) / 255.0;

    CGFloat blue  = (rawData[byteIndex + 2] * 1.0) / 255.0;

    CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;

    UIColor *result = nil;

    result = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];

    free(rawData);

    returnresult;

    7、判断该图片是否有透明度通道

    - (BOOL)hasAlphaChannel

    {

    CGImageAlphaInfo alpha = CGImageGetAlphaInfo(self.CGImage);

    return(alpha == kCGImageAlphaFirst ||

    alpha == kCGImageAlphaLast ||

    alpha == kCGImageAlphaPremultipliedFirst ||

    alpha == kCGImageAlphaPremultipliedLast);

    }

    8、获得灰度图

    + (UIImage*)covertToGrayImageFromImage:(UIImage*)sourceImage

    {

    int width = sourceImage.size.width;

    int height = sourceImage.size.height;

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

    CGContextRef context = CGBitmapContextCreate (nil,width,height,8,0,colorSpace,kCGImageAlphaNone);

    CGColorSpaceRelease(colorSpace);

    if(context == NULL) {

    returnnil;

    }

    CGContextDrawImage(context,CGRectMake(0, 0, width, height), sourceImage.CGImage);

    CGImageRef contextRef = CGBitmapContextCreateImage(context);

    UIImage *grayImage = [UIImage imageWithCGImage:contextRef];

    CGContextRelease(context);

    CGImageRelease(contextRef);

    returngrayImage;

    }

    9、合并两个图片

    + (UIImage*)mergeImage:(UIImage*)firstImage withImage:(UIImage*)secondImage {

    CGImageRef firstImageRef = firstImage.CGImage;

    CGFloat firstWidth = CGImageGetWidth(firstImageRef);

    CGFloat firstHeight = CGImageGetHeight(firstImageRef);

    CGImageRef secondImageRef = secondImage.CGImage;

    CGFloat secondWidth = CGImageGetWidth(secondImageRef);

    CGFloat secondHeight = CGImageGetHeight(secondImageRef);

    CGSize mergedSize = CGSizeMake(MAX(firstWidth, secondWidth), MAX(firstHeight, secondHeight));

    UIGraphicsBeginImageContext(mergedSize);

    [firstImage drawInRect:CGRectMake(0, 0, firstWidth, firstHeight)];

    [secondImage drawInRect:CGRectMake(0, 0, secondWidth, secondHeight)];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    returnimage;

    }

    10、为imageView添加倒影

    CGRect frame = self.frame;

    frame.origin.y += (frame.size.height + 1);

    UIImageView *reflectionImageView = [[UIImageView alloc] initWithFrame:frame];

    self.clipsToBounds = TRUE;

    reflectionImageView.contentMode = self.contentMode;

    [reflectionImageView setImage:self.image];

    reflectionImageView.transform = CGAffineTransformMakeScale(1.0, -1.0);

    CALayer *reflectionLayer = [reflectionImageView layer];

    CAGradientLayer *gradientLayer = [CAGradientLayer layer];

    gradientLayer.bounds = reflectionLayer.bounds;

    gradientLayer.position = CGPointMake(reflectionLayer.bounds.size.width / 2, reflectionLayer.bounds.size.height * 0.5);

    gradientLayer.colors = [NSArray arrayWithObjects:

    (id)[[UIColor clearColor] CGColor],

    (id)[[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.3] CGColor], nil];

    gradientLayer.startPoint = CGPointMake(0.5,0.5);

    gradientLayer.endPoint = CGPointMake(0.5,1.0);

    reflectionLayer.mask = gradientLayer;

    [self.superview addSubview:reflectionImageView];

    11、画水印

    // 画水印

    - (void) setImage:(UIImage *)image withWaterMark:(UIImage *)mark inRect:(CGRect)rect

    {

    if([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)

    {

    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);

    }

    //原图

    [image drawInRect:self.bounds];

    //水印图

    [mark drawInRect:rect];

    UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    self.image = newPic;

    }

    12、获取一个视频的第一帧图片

    NSURL *url = [NSURL URLWithString:filepath];

    AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:url options:nil];

    AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];

    generate1.appliesPreferredTrackTransform = YES;

    NSError *err = NULL;

    CMTime time = CMTimeMake(1, 2);

    CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];

    UIImage *one = [[UIImage alloc] initWithCGImage:oneRef];

    returnone;

    13、UIView背景颜色渐变

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];

    [self.view addSubview:view];

    CAGradientLayer *gradient = [CAGradientLayer layer];

    gradient.frame = view.bounds;

    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];

    [view.layer insertSublayer:gradient atIndex:0];

    14、UIImage和base64互转

    // view分类方法

    - (NSString *)encodeToBase64String:(UIImage *)image {

    return[UIImagePNGRepresentation(image) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

    }

    - (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {

    NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];

    return[UIImage imageWithData:data];

    }

    15、将一个image保存在相册中

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

    或者

    #import

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

    PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];

    changeRequest.creationDate          = [NSDate date];

    } completionHandler:^(BOOL success, NSError *error) {

    if(success) {

    NSLog(@"successfully saved");

    }

    else{

    NSLog(@"error saving to photos: %@", error);

    }

    }];

    16、修改cell.imageView的大小

    UIImage *icon = [UIImage imageNamed:@""];

    CGSize itemSize = CGSizeMake(30, 30);

    UIGraphicsBeginImageContextWithOptions(itemSize, NO ,0.0);

    CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);

    [icon drawInRect:imageRect];

    cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    17、    

    相关文章

      网友评论

          本文标题:iOS开发中 UIImageView相关的小知识点

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