美文网首页
iOS获取图片的尺寸大小

iOS获取图片的尺寸大小

作者: 在路上浅谈管理 | 来源:发表于2018-11-22 09:14 被阅读0次

一:根据url,获取网络图片的尺寸大小:

+(CGSize)getImageSizeWithURL:(id)imageURL

{

    NSURL* URL = nil;

    if([imageURL isKindOfClass:[NSURLclass]]){

        URL = imageURL;

    }

    if([imageURL isKindOfClass:[NSStringclass]]){

        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];

    }

    elseif([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)

    {

        intw1 =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)];

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

        inth1 =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)];

        inth = (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)

    {

        shortw1 =0, w2 =0;

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

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

        shortw = w1 + (w2 <<8);

        shorth1 =0, h2 =0;

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

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

        shorth = 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字段shortw1 =0, w2 =0;

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

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

        shortw = (w1 <<8) + w2;

        shorth1 =0, h2 =0;

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

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

        shorth = (h1 <<8) + h2;

        return CGSizeMake(w, h);

    } else {

        shortword =0x0;

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

        if(word ==0xdb) {

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

            if(word ==0xdb) {// 两个DQT字段shortw1 =0, w2 =0;

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

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

                shortw = (w1 <<8) + w2;

                shorth1 =0, h2 =0;

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

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

                shorth = (h1 <<8) + h2;

                return CGSizeMake(w, h);

            } else{// 一个DQT字段shortw1 =0, w2 =0;

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

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

                shortw = (w1 <<8) + w2;

                shorth1 =0, h2 =0;

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

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

                shorth = (h1 <<8) + h2;

                return CGSizeMake(w, h);

            }

        } else {

            return CGSizeZero;

        }

    }

}

二:获取本地图片:

在获取本地的图片的时候,要注意一个问题,就是该图片是本地已经有的,还是本地没有,通过下载来的。两种情况。

1.本地已经存在的获取图片尺寸的方法:

CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;

2.通过先下载到本地,在获取图片尺寸的,要先找到图片的路径,在获取尺寸,如果直接获取,则会导致程序奔溃,因为找不到图片路径:

NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    NSString *path1 = [documentPath stringByAppendingPathComponent:@"ss.png"];

    UIImage *image1=[UIImage imageWithContentsOfFile:path1];

    CGSize size=image1.size;

相关文章

网友评论

      本文标题:iOS获取图片的尺寸大小

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