NSImageUtil.m 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. //
  2. // NSImageUtil.m
  3. // wq
  4. //
  5. // Created by weqia on 13-7-25.
  6. // Copyright (c) 2013年 Weqia. All rights reserved.
  7. //
  8. #import "NSImageUtil.h"
  9. #import "HBHttpRequestCache.h"
  10. @implementation NSImageUtil
  11. +(UIImage*)getClickImage:(UIImage*)originaLimage withSize:(CGSize)sizeview
  12. {
  13. CGSize sizeImg=originaLimage.size;
  14. UIImageOrientation orientation=originaLimage.imageOrientation;
  15. CGRect rect=CGRectMake((sizeImg.width-sizeview.width)/2,(sizeImg.height-sizeview.height)/2, sizeview.width, sizeview.height);
  16. CGImageRef imgRef=CGImageCreateWithImageInRect(originaLimage.CGImage, rect);
  17. return [UIImage imageWithCGImage:imgRef scale:1 orientation:orientation];
  18. }
  19. +(UIImage*)limitSizeImage:(UIImage*)originaImage withSize:(CGSize)sizev
  20. {
  21. UIImageOrientation orientation=originaImage.imageOrientation;
  22. CGSize size=originaImage.size;
  23. if(size.width==0)
  24. return nil;
  25. if(sizev.width==0)
  26. return nil;
  27. float imgScale=0.0f;
  28. if(size.width>0)
  29. imgScale=size.height/size.width;
  30. float viewScale=0.0f;
  31. if(sizev.width>0)
  32. viewScale=sizev.height/sizev.width;
  33. float width=size.width,height=size.height;
  34. if(imgScale<viewScale&&size.width>sizev.width){
  35. width=sizev.width;
  36. height=sizev.width*imgScale;
  37. }else if(imgScale>=viewScale&&size.height>sizev.height){
  38. height=sizev.height;
  39. if(imgScale>0)
  40. width=height/imgScale;
  41. }
  42. return [UIImage imageWithCGImage:originaImage.CGImage scale:(size.width/width) orientation:orientation];
  43. }
  44. + (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize
  45. {
  46. CGSize size=image.size;
  47. if(size.height<newSize.height&&size.width<newSize.width)
  48. return image;
  49. float imgScale=0.0f;
  50. if(size.width>0)
  51. imgScale=size.height/size.width;
  52. float viewScale=0.0f;
  53. if(newSize.width>0)
  54. viewScale=newSize.height/newSize.width;
  55. float width=size.width,height=size.height;
  56. if(imgScale<viewScale&&size.width>newSize.width){
  57. width=newSize.width;
  58. height=newSize.width*imgScale;
  59. }else if(imgScale>=viewScale&&size.height>newSize.height){
  60. height=newSize.height;
  61. if(imgScale>0)
  62. width=height/imgScale;
  63. }
  64. // Create a graphics image context
  65. UIGraphicsBeginImageContext(CGSizeMake(width, height));
  66. // Tell the old image to draw in this new context, with the desired
  67. // new size
  68. [image drawInRect:CGRectMake(0,0,width,height)];
  69. // Get the new image from the context
  70. UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  71. // End the context
  72. UIGraphicsEndImageContext();
  73. // Return the new image.
  74. return newImage;
  75. }
  76. -(void) showBigImage:(UIImage*)image fromView:(UIImageView*)fromView complete:(void(^)(UIView *bacView))complete
  77. {
  78. if(image!=nil&&image.size.width==0)
  79. return;
  80. if(fromView!=nil&&fromView.frame.size.width==0)
  81. return;
  82. CGRect frame;
  83. UIView * back=[[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];
  84. back.backgroundColor=[UIColor clearColor];
  85. [fromView.window addSubview:back];
  86. CGRect rect=[fromView.superview convertRect:fromView.frame toView:back];
  87. UIImageView * imgView=[[UIImageView alloc]initWithFrame:rect];
  88. [back addSubview:imgView];
  89. _backView=back;
  90. _imageView=imgView;
  91. _imageView.contentMode=UIViewContentModeScaleAspectFill;
  92. _imageView.clipsToBounds=YES;
  93. rect=_backView.bounds;
  94. if(image!=nil){
  95. _image=image;
  96. imgView.image=image;
  97. CGSize size=image.size;
  98. float imgScale=size.height/size.width;
  99. float viewScale=rect.size.height/rect.size.width;
  100. float width=size.width,height=size.height;
  101. if(imgScale<viewScale&&size.width>rect.size.width){
  102. width=rect.size.width;
  103. height=rect.size.width*imgScale;
  104. }else if(imgScale>=viewScale&&size.height>rect.size.height){
  105. height=rect.size.height;
  106. width=height/imgScale;
  107. }
  108. frame=CGRectMake((rect.size.width-width)/2, (rect.size.height-height)/2, width, height);
  109. }
  110. else{
  111. imgView.image=fromView.image;
  112. CGSize size=fromView.image.size;
  113. float imgScale=size.height/size.width;
  114. float viewScale=rect.size.height/rect.size.width;
  115. float width=size.width,height=size.height;
  116. if(imgScale<viewScale&&size.width>rect.size.width){
  117. width=rect.size.width;
  118. height=rect.size.width*imgScale;
  119. }else if(imgScale>=viewScale&&size.height>rect.size.height){
  120. height=rect.size.height;
  121. width=height/imgScale;
  122. }
  123. frame=CGRectMake((rect.size.width-width)/2, (rect.size.height-height)/2, width, height);
  124. }
  125. fromView.hidden=YES;
  126. [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
  127. back.backgroundColor=[UIColor blackColor];
  128. imgView.frame=frame;
  129. } completion:^(BOOL finished) {
  130. complete(back);
  131. fromView.hidden=NO;
  132. _imageView.hidden=YES;
  133. }];
  134. }
  135. -(void) showBigImageWithUrl:(NSString *)url fromView:(UIImageView *)fromView complete:(void (^)(UIView *))complete
  136. {
  137. UIImage* image1=[[HBHttpRequestCache shareCache] getBitmapFromMemory:url];
  138. if(image1!=nil){
  139. [self showBigImage:image1 fromView:fromView complete:complete];
  140. }else{
  141. UIImage *image2=[[HBHttpRequestCache shareCache] getBitmapFromDisk:url];
  142. if(image2!=nil){
  143. [self showBigImage:image2 fromView:fromView complete:complete];
  144. }else{
  145. [self showBigImage:nil fromView:fromView complete:complete];
  146. }
  147. }
  148. }
  149. -(void) goBackToView:(UIImageView*)toView withImage:(UIImage*)image
  150. {
  151. [UIApplication sharedApplication].keyWindow.clipsToBounds=YES;
  152. _imageView.hidden=NO;
  153. if(image!=nil&&image.size.width==0)
  154. return;
  155. if(toView!=nil&&toView.frame.size.width==0)
  156. return;
  157. CGRect rect1=[toView.superview convertRect:toView.frame toView:_backView];
  158. CGRect frame;
  159. _backView.hidden=NO;
  160. toView.hidden=YES;
  161. CGRect rect=_backView.bounds;
  162. if(image!=nil){
  163. CGSize size=image.size;
  164. float imgScale=size.height/size.width;
  165. float viewScale=rect.size.height/rect.size.width;
  166. float width=size.width,height=size.height;
  167. if(imgScale<viewScale&&size.width>rect.size.width){
  168. width=rect.size.width;
  169. height=rect.size.width*imgScale;
  170. }else if(imgScale>=viewScale&&size.height>rect.size.height){
  171. height=rect.size.height;
  172. width=height/imgScale;
  173. }
  174. frame=CGRectMake((rect.size.width-width)/2, (rect.size.height-height)/2, width, height);
  175. _imageView.frame=frame;
  176. _imageView.image=image;
  177. }
  178. else{
  179. frame=toView.frame;
  180. _imageView.image=toView.image;
  181. }
  182. [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
  183. _backView.backgroundColor=[UIColor clearColor];
  184. _imageView.frame=rect1;
  185. } completion:^(BOOL finished) {
  186. toView.hidden=NO;
  187. [_backView removeFromSuperview];
  188. _image=nil;
  189. _imageView=nil;
  190. _backView=nil;
  191. [UIApplication sharedApplication].keyWindow.clipsToBounds=YES;
  192. }];
  193. }
  194. -(void) goBackToView:(UIImageView *)toView withImageUrl:(NSString *)url
  195. {
  196. UIImage* image=[[HBHttpRequestCache shareCache] getBitmapFromMemory:url];
  197. if(image){
  198. [self goBackToView:toView withImage:image];
  199. }else{
  200. UIImage *image=[[HBHttpRequestCache shareCache] getBitmapFromDisk:url];
  201. if(image){
  202. [self goBackToView:toView withImage:image];
  203. }else{
  204. [self goBackToView:toView withImage:nil];
  205. }
  206. }
  207. }
  208. @end