IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合


IOS图片处理网络url图片


[objc] view plaincopy在CODE上查看代码片派生到我的代码片

// 图片处理 0 半灰色  1 灰度   2 深棕色    3 反色  

+(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UIImageGrayLevelType)type;  

  

//色值 变暗多少 0.0 - 1.0  

+(UIImage*)imageWithImage:(UIImage*)image darkValue:(float)darkValue;  

  

/**  

    获取网络图片的Size, 先通过文件头来获取图片大小  

    如果失败 会下载完整的图片Data 来计算大小 所以最好别放在主线程 

    如果你有使用SDWebImage就会先看下 SDWebImage有缓存过改图片没有 

    支持文件头大小的格式 png、gif、jpg   http://www.cocoachina.com/bbs/read.php?tid=165823 

 */  

+(CGSize)downloadImageSizeWithURL:(id)imageURL;  



代码实现:

  

-(id)diskImageDataBySearchingAllPathsForKey:(id)key{return nil;}  

+(CGSize)downloadImageSizeWithURL:(id)imageURL  

{  

    NSURL* URL = nil;  

    if([imageURL isKindOfClass:[NSURL class]]){  

        URL = imageURL;  

    }  

    if([imageURL isKindOfClass:[NSString class]]){  

        URL = [NSURL URLWithString:imageURL];  

    }  

    if(URL == nil)  

        return CGSizeZero;  

      

    NSString* absoluteString = URL.absoluteString;  

      

#ifdef dispatch_main_sync_safe  

    if([[SDImageCache sharedImageCache] diskImageExistsWithKey:absoluteString])  

    {  

        UIImage* image = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:absoluteString];  

        if(!image)  

        {  

            NSData* data = [[SDImageCache sharedImageCache] performSelector:@selector(diskImageDataBySearchingAllPathsForKey:) withObject:URL.absoluteString];  

            image = [UIImage imageWithData:data];  

        }  

        if(!image)  

        {  

            return image.size;  

        }  

    }  

#endif  

      

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];  

    NSString* pathExtendsion = [URL.pathExtension lowercaseString];  

      

    CGSize size = CGSizeZero;  

    if([pathExtendsion isEqualToString:@"png"]){  

        size =  [self downloadPNGImageSizeWithRequest:request];  

    }  

    else if([pathExtendsion isEqual:@"gif"])  

    {  

        size =  [self downloadGIFImageSizeWithRequest:request];  

    }  

    else{  

        size = [self downloadJPGImageSizeWithRequest:request];  

    }  

    if(CGSizeEqualToSize(CGSizeZero, size))  

    {  

        NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:nil error:nil];  

        UIImage* image = [UIImage imageWithData:data];  

        if(image)  

        {  

#ifdef dispatch_main_sync_safe  

            [[SDImageCache sharedImageCache] storeImage:image recalculateFromImage:YES imageData:data forKey:URL.absoluteString toDisk:YES];  

#endif  

            size = image.size;  

        }  

    }  

    return size;  

}  

+(CGSize)downloadPNGImageSizeWithRequest:(NSMutableURLRequest*)request  

{  

    [request setValue:@"bytes=16-23" forHTTPHeaderField:@"Range"];  

    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  

    if(data.length == 8)  

    {  

        int w1 = 0, w2 = 0, w3 = 0, w4 = 0;  

        [data getBytes:&w1 range:NSMakeRange(0, 1)];  

        [data getBytes:&w2 range:NSMakeRange(1, 1)];  

        [data getBytes:&w3 range:NSMakeRange(2, 1)];  

        [data getBytes:&w4 range:NSMakeRange(3, 1)];  

        int w = (w1 << 24) + (w2 << 16) + (w3 << 8) + w4;  

        int h1 = 0, h2 = 0, h3 = 0, h4 = 0;  

        [data getBytes:&h1 range:NSMakeRange(4, 1)];  

        [data getBytes:&h2 range:NSMakeRange(5, 1)];  

        [data getBytes:&h3 range:NSMakeRange(6, 1)];  

        [data getBytes:&h4 range:NSMakeRange(7, 1)];  

        int h = (h1 << 24) + (h2 << 16) + (h3 << 8) + h4;  

        return CGSizeMake(w, h);  

    }  

    return CGSizeZero;  

}  

+(CGSize)downloadGIFImageSizeWithRequest:(NSMutableURLRequest*)request  

{  

    [request setValue:@"bytes=6-9" forHTTPHeaderField:@"Range"];  

    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  

    if(data.length == 4)  

    {  

        short w1 = 0, w2 = 0;  

        [data getBytes:&w1 range:NSMakeRange(0, 1)];  

        [data getBytes:&w2 range:NSMakeRange(1, 1)];  

        short w = w1 + (w2 << 8);  

        short h1 = 0, h2 = 0;  

        [data getBytes:&h1 range:NSMakeRange(2, 1)];  

        [data getBytes:&h2 range:NSMakeRange(3, 1)];  

        short h = h1 + (h2 << 8);  

        return CGSizeMake(w, h);  

    }  

    return CGSizeZero;  

}  

+(CGSize)downloadJPGImageSizeWithRequest:(NSMutableURLRequest*)request  

{  

    [request setValue:@"bytes=0-209" forHTTPHeaderField:@"Range"];  

    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  

      

    if ([data length] <= 0x58) {  

        return CGSizeZero;  

    }  

      

    if ([data length] < 210) {// 肯定只有一个DQT字段  

        short w1 = 0, w2 = 0;  

        [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];  

        [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];  

        short w = (w1 << 8) + w2;  

        short h1 = 0, h2 = 0;  

        [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];  

        [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];  

        short h = (h1 << 8) + h2;  

        return CGSizeMake(w, h);  

    } else {  

        short word = 0x0;  

        [data getBytes:&word range:NSMakeRange(0x15, 0x1)];  

        if (word == 0xdb) {  

            [data getBytes:&word range:NSMakeRange(0x5a, 0x1)];  

            if (word == 0xdb) {// 两个DQT字段  

                short w1 = 0, w2 = 0;  

                [data getBytes:&w1 range:NSMakeRange(0xa5, 0x1)];  

                [data getBytes:&w2 range:NSMakeRange(0xa6, 0x1)];  

                short w = (w1 << 8) + w2;  

                short h1 = 0, h2 = 0;  

                [data getBytes:&h1 range:NSMakeRange(0xa3, 0x1)];  

                [data getBytes:&h2 range:NSMakeRange(0xa4, 0x1)];  

                short h = (h1 << 8) + h2;  

                return CGSizeMake(w, h);  

            } else {// 一个DQT字段  

                short w1 = 0, w2 = 0;  

                [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];  

                [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];  

                short w = (w1 << 8) + w2;  

                short h1 = 0, h2 = 0;  

                [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];  

                [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];  

                short h = (h1 << 8) + h2;  

                return CGSizeMake(w, h);  

            }  

        } else {  

            return CGSizeZero;  

        }  

    }  

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值