iOS 获取网络图片的尺寸

//    1、直接获取

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:serverUrl]];
    UIImage *showimage = [UIImage imageWithData:data];
    DDLOG(@"w = %f,h = %f",showimage.size.width,showimage.size.height);
    CGFloat scale = showimage.size.height/showimage.size.width;
    self.scrollView.contentSize = CGSizeMake(MSWIDTH, MSWIDTH * scale);


//2、需要用到第三方库SDWebImage


UIImageView *v1 = [[UIImageViewalloc]init];

    [self.viewaddSubview:v1];

    [v1 sd_setImageWithURL:[NSURLURLWithString:serverUrl]placeholderImage:[UIImageimageNamed:@"bg2"]completed:^(UIImage *image,NSError *error, SDImageCacheType cacheType,NSURL *imageURL) {

        

        CGSize size = image.size;

        CGFloat w = size.width;

        CGFloat H = size.height;

        CGFloat scale = H/w;

        

        

        DDLOG(@"++++++++++++++++++%.2f------%.2f",size.width,size.height);

        self.scrollView.contentSize =CGSizeMake(MSWIDTH,MSWIDTH * scale);

        picImageView.frame =CGRectMake(0,0,MSWIDTH,self.scrollView.contentSize.height);

    }];



 //3、同步加载

CGSize size = [DetailViewControllergetImageSizeWithURL:[NSURLURLWithString:serverUrl]];

//获取图片的大小

+(CGSize)getImageSizeWithURL:(id)imageURL

{

    NSURL* URL =nil;

    if([imageURLisKindOfClass:[NSURLclass]]){

        URL = imageURL;

    }

    if([imageURLisKindOfClass:[NSStringclass]]){

        URL = [NSURLURLWithString:imageURL];

    }

    if(URL ==nil)

        returnCGSizeZero;                 // url不正确返回CGSizeZero

    

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

    NSString* pathExtendsion = [URL.pathExtensionlowercaseString];

    

    CGSize size =CGSizeZero;

    if([pathExtendsionisEqualToString:@"png"]){

        size =  [selfgetPNGImageSizeWithRequest:request];

    }else{

        size = [selfgetJPGImageSizeWithRequest:request];

    }

    if(CGSizeEqualToSize(CGSizeZero, size))                   //如果获取文件头信息失败,发送异步请求请求原图

    {

        NSData* data = [NSURLConnectionsendSynchronousRequest:[NSURLRequestrequestWithURL:URL]returningResponse:nilerror:nil];

        UIImage* image = [UIImageimageWithData:data];

        if(image)

        {

            size = image.size;

        }

    }

    return size;

}

//  获取PNG图片的大小

+(CGSize)getPNGImageSizeWithRequest:(NSMutableURLRequest*)request

{

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

    NSData* data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:nil];

    if(data.length ==8)

    {

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

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

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

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

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

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

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

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

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

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

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

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

        returnCGSizeMake(w, h);

    }

    returnCGSizeZero;

}

+(CGSize)getJPGImageSizeWithRequest:(NSMutableURLRequest*)request

{

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

    NSData* data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:nil];

    

    if ([datalength] <=0x58) {

        returnCGSizeZero;

    }

    

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

        short w1 =0, w2 =0;

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

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

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

        short h1 =0, h2 =0;

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

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

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

        returnCGSizeMake(w, h);

    } else {

        short word =0x0;

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

        if (word ==0xdb) {

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

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

                short w1 =0, w2 =0;

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

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

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

                short h1 =0, h2 =0;

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

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

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

                returnCGSizeMake(w, h);

            } else {//一个DQT字段

                short w1 =0, w2 =0;

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

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

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

                short h1 =0, h2 =0;

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

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

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

                returnCGSizeMake(w, h);

            }

        } else {

            returnCGSizeZero;

        }

    }

}


// 4、

+(CGFloat)returnItemImageHeight:(NSString *)cellEditPath{

    

    __blockCGFloat itemW =MSWIDTH-30;

    __blockCGFloat itemH =0;

    

    if (cellEditPath.length>0) {

        

        UIImageView * imageView = [[UIImageViewalloc]init];

        NSURL * url = [NSURLURLWithString:cellEditPath];

        [imageView sd_setImageWithURL:urlplaceholderImage:[UIImageimageNamed:@"bg2"]];

        SDWebImageManager *manager = [SDWebImageManagersharedManager];

        BOOL existBool = [managerdiskImageExistsForURL:url];//判断是否有缓存

        UIImage * image;

        if (existBool) {

            image = [[manager imageCache]imageFromDiskCacheForKey:url.absoluteString];

        }else{

            NSData *data = [NSDatadataWithContentsOfURL:url];

            image = [UIImageimageWithData:data];

        }

        

        //根据image的比例来设置高度

        if (image.size.width) {

            itemH = image.size.height / image.size.width * itemW;

            

            if (itemH >= itemW) {

                

                itemH = image.size.height / image.size.width * itemW;

            }

        }

    }

    

    return itemH;

    

}





有没有你喜欢的呢?????????




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值