根据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:[
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;
}
}
}
0 0
- 根据Url 获取图片尺寸 iOS
- 根据Url 获取图片尺寸 iOS
- 根据Url 获取图片尺寸
- 根据图片url获取图片尺寸
- 根据图片url获取图片尺寸
- 根据图片url获取图片尺寸
- iOS开发——根据Url 获取图片尺寸
- ios 根据url获取html,并解析
- iOS-92-获取网络图片尺寸
- iOS开发 根据URL获取图片的尺寸
- iOS 图片尺寸
- 根据url获取顶级域名
- 根据网址(url)获取XML
- java--根据URL获取信息
- 根据url获取Bitmap对象
- java根据url获取数据
- iOS开发之视频根据url获取第一帧图片,获取任一帧图片
- iOS根据URL生成二维码
- 好的博客整理
- CI Weekly #2 | 如何优化开发流程,实现项目持续集成?
- tomcat设置直接通过域名访问项目(不需要接 /项目名)
- VS2010 LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 的解决方法
- IDEAL Ultimate 的SVN导入
- 根据Url 获取图片尺寸 iOS
- opencv 距离变换的GPU并行化计算
- 7.producer
- 集群的简单理解
- c++枚举和搜索注册表
- UICollectionViewLayout
- Android开发之解决APP启动白屏或者黑屏闪现的问题
- LeetCode----17. Letter Combinations of a Phone Number(遍历树+多重循环)
- java实现文件复制