zoukankan      html  css  js  c++  java
  • 获取网络图片的大小 改变 图片色值 灰度什么的方法集合-b

    直接上代码了 头文件

     
    1. // 图片处理 0 半灰色  1 灰度   2 深棕色    3 反色  
    2. +(UIImage*)imageWithImage:(UIImage*)image grayLevelType:(UIImageGrayLevelType)type;  
    3.   
    4. //色值 变暗多少 0.0 - 1.0  
    5. +(UIImage*)imageWithImage:(UIImage*)image darkValue:(float)darkValue;  
    6.   
    7. /**  
    8.     获取网络图片的Size, 先通过文件头来获取图片大小  
    9.     如果失败 会下载完整的图片Data 来计算大小 所以最好别放在主线程 
    10.     如果你有使用SDWebImage就会先看下 SDWebImage有缓存过改图片没有 
    11.     支持文件头大小的格式 png、gif、jpg   http://www.cocoachina.com/bbs/read.php?tid=165823 
    12.  */  
    13. +(CGSize)downloadImageSizeWithURL:(id)imageURL;  



    代码实现:

     
    1. //讨厌警告  
    2. -(id)diskImageDataBySearchingAllPathsForKey:(id)key{return nil;}  
    3. +(CGSize)downloadImageSizeWithURL:(id)imageURL  
    4. {  
    5.     NSURL* URL = nil;  
    6.     if([imageURL isKindOfClass:[NSURL class]]){  
    7.         URL = imageURL;  
    8.     }  
    9.     if([imageURL isKindOfClass:[NSString class]]){  
    10.         URL = [NSURL URLWithString:imageURL];  
    11.     }  
    12.     if(URL == nil)  
    13.         return CGSizeZero;  
    14.       
    15.     NSString* absoluteString = URL.absoluteString;  
    16.       
    17. #ifdef dispatch_main_sync_safe  
    18.     if([[SDImageCache sharedImageCache] diskImageExistsWithKey:absoluteString])  
    19.     {  
    20.         UIImage* image = [[SDImageCache sharedImageCache] imageFromMemoryCacheForKey:absoluteString];  
    21.         if(!image)  
    22.         {  
    23.             NSData* data = [[SDImageCache sharedImageCache] performSelector:@selector(diskImageDataBySearchingAllPathsForKey:) withObject:URL.absoluteString];  
    24.             image = [UIImage imageWithData:data];  
    25.         }  
    26.         if(image)  
    27.         {  
    28.             return image.size;  
    29.         }  
    30.     }  
    31. #endif  
    32.       
    33.     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];  
    34.     NSString* pathExtendsion = [URL.pathExtension lowercaseString];  
    35.       
    36.     CGSize size = CGSizeZero;  
    37.     if([pathExtendsion isEqualToString:@"png"]){  
    38.         size =  [self downloadPNGImageSizeWithRequest:request];  
    39.     }  
    40.     else if([pathExtendsion isEqual:@"gif"])  
    41.     {  
    42.         size =  [self downloadGIFImageSizeWithRequest:request];  
    43.     }  
    44.     else{  
    45.         size = [self downloadJPGImageSizeWithRequest:request];  
    46.     }  
    47.     if(CGSizeEqualToSize(CGSizeZero, size))  
    48.     {  
    49.         NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:nil error:nil];  
    50.         UIImage* image = [UIImage imageWithData:data];  
    51.         if(image)  
    52.         {  
    53. #ifdef dispatch_main_sync_safe  
    54.             [[SDImageCache sharedImageCache] storeImage:image recalculateFromImage:YES imageData:data forKey:URL.absoluteString toDisk:YES];  
    55. #endif  
    56.             size = image.size;  
    57.         }  
    58.     }  
    59.     return size;  
    60. }  
    61. +(CGSize)downloadPNGImageSizeWithRequest:(NSMutableURLRequest*)request  
    62. {  
    63.     [request setValue:@"bytes=16-23" forHTTPHeaderField:@"Range"];  
    64.     NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
    65.     if(data.length == 8)  
    66.     {  
    67.         int w1 = 0, w2 = 0, w3 = 0, w4 = 0;  
    68.         [data getBytes:&w1 range:NSMakeRange(0, 1)];  
    69.         [data getBytes:&w2 range:NSMakeRange(1, 1)];  
    70.         [data getBytes:&w3 range:NSMakeRange(2, 1)];  
    71.         [data getBytes:&w4 range:NSMakeRange(3, 1)];  
    72.         int w = (w1 << 24) + (w2 << 16) + (w3 << 8) + w4;  
    73.         int h1 = 0, h2 = 0, h3 = 0, h4 = 0;  
    74.         [data getBytes:&h1 range:NSMakeRange(4, 1)];  
    75.         [data getBytes:&h2 range:NSMakeRange(5, 1)];  
    76.         [data getBytes:&h3 range:NSMakeRange(6, 1)];  
    77.         [data getBytes:&h4 range:NSMakeRange(7, 1)];  
    78.         int h = (h1 << 24) + (h2 << 16) + (h3 << 8) + h4;  
    79.         return CGSizeMake(w, h);  
    80.     }  
    81.     return CGSizeZero;  
    82. }  
    83. +(CGSize)downloadGIFImageSizeWithRequest:(NSMutableURLRequest*)request  
    84. {  
    85.     [request setValue:@"bytes=6-9" forHTTPHeaderField:@"Range"];  
    86.     NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
    87.     if(data.length == 4)  
    88.     {  
    89.         short w1 = 0, w2 = 0;  
    90.         [data getBytes:&w1 range:NSMakeRange(0, 1)];  
    91.         [data getBytes:&w2 range:NSMakeRange(1, 1)];  
    92.         short w = w1 + (w2 << 8);  
    93.         short h1 = 0, h2 = 0;  
    94.         [data getBytes:&h1 range:NSMakeRange(2, 1)];  
    95.         [data getBytes:&h2 range:NSMakeRange(3, 1)];  
    96.         short h = h1 + (h2 << 8);  
    97.         return CGSizeMake(w, h);  
    98.     }  
    99.     return CGSizeZero;  
    100. }  
    101. +(CGSize)downloadJPGImageSizeWithRequest:(NSMutableURLRequest*)request  
    102. {  
    103.     [request setValue:@"bytes=0-209" forHTTPHeaderField:@"Range"];  
    104.     NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
    105.       
    106.     if ([data length] <= 0x58) {  
    107.         return CGSizeZero;  
    108.     }  
    109.       
    110.     if ([data length] < 210) {// 肯定只有一个DQT字段  
    111.         short w1 = 0, w2 = 0;  
    112.         [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];  
    113.         [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];  
    114.         short w = (w1 << 8) + w2;  
    115.         short h1 = 0, h2 = 0;  
    116.         [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];  
    117.         [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];  
    118.         short h = (h1 << 8) + h2;  
    119.         return CGSizeMake(w, h);  
    120.     } else {  
    121.         short word = 0x0;  
    122.         [data getBytes:&word range:NSMakeRange(0x15, 0x1)];  
    123.         if (word == 0xdb) {  
    124.             [data getBytes:&word range:NSMakeRange(0x5a, 0x1)];  
    125.             if (word == 0xdb) {// 两个DQT字段  
    126.                 short w1 = 0, w2 = 0;  
    127.                 [data getBytes:&w1 range:NSMakeRange(0xa5, 0x1)];  
    128.                 [data getBytes:&w2 range:NSMakeRange(0xa6, 0x1)];  
    129.                 short w = (w1 << 8) + w2;  
    130.                 short h1 = 0, h2 = 0;  
    131.                 [data getBytes:&h1 range:NSMakeRange(0xa3, 0x1)];  
    132.                 [data getBytes:&h2 range:NSMakeRange(0xa4, 0x1)];  
    133.                 short h = (h1 << 8) + h2;  
    134.                 return CGSizeMake(w, h);  
    135.             } else {// 一个DQT字段  
    136.                 short w1 = 0, w2 = 0;  
    137.                 [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];  
    138.                 [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];  
    139.                 short w = (w1 << 8) + w2;  
    140.                 short h1 = 0, h2 = 0;  
    141.                 [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];  
    142.                 [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];  
    143.                 short h = (h1 << 8) + h2;  
    144.                 return CGSizeMake(w, h);  
    145.             }  
    146.         } else {  
    147.             return CGSizeZero;  
    148.         }  
    149.     }  
    150. }  



    download url:// http://download.csdn.net/detail/li6185377/7368213

    感谢大神分享

  • 相关阅读:
    Python简单的闹钟程序(Win)+开机自启
    (未完待续)学习机器学习必备的线性代数知识
    条件随机场 0 | 随机过程的概念及其统计特征
    Python-OpenCV学习(五):二维绘图
    Python-OpenCV学习(四):基本图像处理
    Python-OpenCV学习(二):OpenCV+python在windows上的安装
    CF 158A
    CF 84 div1 A
    CF 153 div1 A
    CF 171B
  • 原文地址:https://www.cnblogs.com/isItOk/p/5668768.html
Copyright © 2011-2022 走看看