根据Url 获取图片尺寸 iOS

来源:互联网 发布:网页电子书制作软件 编辑:程序博客网 时间:2024/05/22 13:46

转载自:   http://www.oschina.net/code/snippet_2248391_53038

[代码]根据Url 获取图片尺寸 iOS     跳至 [1] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// 根据图片url获取图片尺寸
+(CGSize)getImageSizeWithURL:(id)imageURL
{
    NSURL* URL = nil;
    if([imageURL isKindOfClass:[NSURLclass]]){
        URL = imageURL;
    }
    if([imageURL isKindOfClass:[NSStringclass]]){
        URL = [NSURLURLWithString:imageURL];
    }
    if(URL == nil)
        returnCGSizeZero;                  // url不正确返回CGSizeZero
     
    NSMutableURLRequest*request = [[NSMutableURLRequestalloc] initWithURL:URL];
    NSString* pathExtendsion = [URL.pathExtension lowercaseString];
     
    CGSize size = CGSizeZero;
    if([pathExtendsion isEqualToString:@"png"]){
        size =  [selfgetPNGImageSizeWithRequest:request];
    }
    elseif([pathExtendsion isEqual:@"gif"])
    {
        size =  [selfgetGIFImageSizeWithRequest: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;
        }
    }
    returnsize;
}
//  获取PNG图片的大小
+(CGSize)getPNGImageSizeWithRequest:(NSMutableURLRequest*)request
{
    [request setValue:@"bytes=16-23"forHTTPHeaderField:@"Range"];
    NSData* data = [NSURLConnectionsendSynchronousRequest:request returningResponse:nilerror: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;
        returnCGSizeMake(w, h);
    }
    returnCGSizeZero;
}
//  获取gif图片的大小
+(CGSize)getGIFImageSizeWithRequest:(NSMutableURLRequest*)request
{
    [request setValue:@"bytes=6-9"forHTTPHeaderField:@"Range"];
    NSData* data = [NSURLConnectionsendSynchronousRequest:request returningResponse:nilerror: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);
        returnCGSizeMake(w, h);
    }
    returnCGSizeZero;
}
//  获取jpg图片的大小
+(CGSize)getJPGImageSizeWithRequest:(NSMutableURLRequest*)request
{
    [request setValue:@"bytes=0-209"forHTTPHeaderField:@"Range"];
    NSData* data = [NSURLConnectionsendSynchronousRequest:request returningResponse:nilerror:nil];
     
    if([data length] <= 0x58) {
        returnCGSizeZero;
    }
     
    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;
        returnCGSizeMake(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;
                returnCGSizeMake(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;
                returnCGSizeMake(w, h);
            }
        }else{
            returnCGSizeZero;
        }
    }
}

0 0
原创粉丝点击