美文网首页
iOS - 根据图片url获取图片尺寸

iOS - 根据图片url获取图片尺寸

作者: HanZhiZzzzz | 来源:发表于2018-10-24 19:23 被阅读0次

    // 根据图片url获取图片尺寸

    +(CGSize)getImageSizeWithURL:(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;                  // url不正确返回CGSizeZero
    
         
    
        NSMutableURLRequest
    *request = [[NSMutableURLRequest
    alloc] initWithURL:URL];
    
        NSString* pathExtendsion = [URL.pathExtension lowercaseString];
    
         
    
        CGSize size = CGSizeZero;
    
        if([pathExtendsion isEqualToString:@"png"]){
    
            size =  [self
    getPNGImageSizeWithRequest:request];
    
        }
    
        else
    if([pathExtendsion isEqual:@"gif"])
    
        {
    
            size =  [self
    getGIFImageSizeWithRequest:request];
    
        }
    
        else{
    
            size = [self
    getJPGImageSizeWithRequest:request];
    
        }
    
        if(CGSizeEqualToSize(CGSizeZero, size))                    // 如果获取文件头信息失败,发送异步请求请求原图
    
        {
    
            NSData* data = [NSURLConnection
    sendSynchronousRequest:[NSURLRequest
    requestWithURL:URL] returningResponse:nil
    error:nil];
    
            UIImage* image = [UIImage
    imageWithData:data];
    
            if(image)
    
            {
    
                size = image.size;
    
            }
    
        }
    
        return
    size;
    
    }
    
    //  获取PNG图片的大小
    
    +(CGSize)getPNGImageSizeWithRequest:(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;
    
    }
    
    //  获取gif图片的大小
    
    +(CGSize)getGIFImageSizeWithRequest:(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;
    
    }
    
    //  获取jpg图片的大小
    
    +(CGSize)getJPGImageSizeWithRequest:(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;
    
            }
    
        }
    
    }
    

    摘自: https://blog.csdn.net/chenyong05314/article/details/52585492

    相关文章

      网友评论

          本文标题:iOS - 根据图片url获取图片尺寸

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