美文网首页
图片相关处理

图片相关处理

作者: 夜未殇 | 来源:发表于2017-06-28 17:09 被阅读0次

    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();
     
      return image;
    }
    

    3、判断图片类型

    //通过图片Data数据第一个字节 来获取图片扩展名
    - (NSString *)contentTypeForImageData:(NSData *)data
    {
        uint8_t c;
        [data getBytes:&c length:1];
        switch (c)
        {
            case 0xFF:
                return @"jpeg";
     
            case 0x89:
                return @"png";
     
            case 0x47:
                return @"gif";
     
            case 0x49:
            case 0x4D:
                return @"tiff";
     
            case 0x52:
            if ([data length] < 12) {
                return nil;
            }
     
            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
            if ([testString hasPrefix:@"RIFF"]
                && [testString hasSuffix:@"WEBP"])
            {
                return @"webp";
            }
     
            return nil;
        }
     
        return nil;
    }
    

    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();
        return image;
    }
    

    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) return nil;
     
        CGImageRef imageRef = self.CGImage;
        NSUInteger width = CGImageGetWidth(imageRef);
        NSUInteger height = CGImageGetHeight(imageRef);
        if (point.x >= width || point.y >= height) return nil;
     
        unsigned char *rawData = malloc(height * width * 4);
        if (!rawData) return nil;
     
        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);
            return nil;
        }
        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);
        return result;
    

    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) {
            return nil;
        }
     
        CGContextDrawImage(context,CGRectMake(0, 0, width, height), sourceImage.CGImage);
        CGImageRef contextRef = CGBitmapContextCreateImage(context);
        UIImage *grayImage = [UIImage imageWithCGImage:contextRef];
        CGContextRelease(context);
        CGImageRelease(contextRef);
     
        return grayImage;
    }
    

    9、根据bundle中的文件名读取图片

    + (UIImage *)imageWithFileName:(NSString *)name {
        NSString *extension = @"png";
     
        NSArray *components = [name componentsSeparatedByString:@"."];
        if ([components count] >= 2) {
            NSUInteger lastIndex = components.count - 1;
            extension = [components objectAtIndex:lastIndex];
     
            name = [name substringToIndex:(name.length-(extension.length+1))];
        }
     
        // 如果为Retina屏幕且存在对应图片,则返回Retina图片,否则查找普通图片
        if ([UIScreen mainScreen].scale == 2.0) {
            name = [name stringByAppendingString:@"@2x"];
     
            NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:extension];
            if (path != nil) {
                return [UIImage imageWithContentsOfFile:path];
            }
        }
     
        if ([UIScreen mainScreen].scale == 3.0) {
            name = [name stringByAppendingString:@"@3x"];
     
            NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:extension];
            if (path != nil) {
                return [UIImage imageWithContentsOfFile:path];
            }
        }
     
        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:extension];
        if (path) {
            return [UIImage imageWithContentsOfFile:path];
        }
     
        return nil;
    }
    

    10、合并两个图片

    + (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();
        return image;
    }
    

    11、为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];
    

    12、画水印

    // 画水印
    - (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;
    }
    

    相关文章

      网友评论

          本文标题:图片相关处理

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