iOS 获取网络图片的尺寸
2017-05-25 10:27
232 查看
// 1、直接获取
//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;
}
有没有你喜欢的呢?????????
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;
}
有没有你喜欢的呢?????????
相关文章推荐
- iOS-92-获取网络图片尺寸
- IOS获取网络图片的尺寸
- IOS开发 SDWebImage获取网络图片的尺寸
- 【iOS开发-从网络上获取图片尺寸】
- iOS 异步加载网络图片,获取图片真实尺寸
- iOS 偶说获取网络请求到的图片尺寸
- ios获取网络图片的尺寸
- iOS下载图片之前获取网络图片尺寸的失败尝试
- IOS 获取网络图像尺寸 更改 图像色彩值 什么一套方法灰色
- iOS开发 根据URL获取图片的尺寸
- 检测SDWebImage有没有缓存图片 IOS 获取网络图片大小
- iOS如何获取网络图片(三)有沙盒的
- IOS网络第五天 AFN-02-文件上传,底部弹出窗体,拍照和相册获取图片上传
- ios 从网络上获取图片
- iOS 获取屏幕尺寸 设置背景图片
- iOS开发-进阶:通过URL地址,从网络上获取图片
- IOS 网络浅析-(六 网络图片获取之三方SDWebImage)
- 获取网络图片的尺寸大小
- ios获取网络图片
- ios通过图片的URL地址,从网络上获取图片(UIImage类型)