在开发中使用分类对原有的系统类进行方法扩展,是增强系统原有类功能的常见做法。

  1. /**
  2. * 自由拉伸一张图片
  3. *
  4. * @param name 图片名字
  5. * @param left 左边开始位置比例 值范围0-1
  6. * @param top 上边开始位置比例 值范围0-1
  7. *
  8. * @return 拉伸后的Image
  9. */
  10. + (UIImage *)resizedImageWithName:(NSString *)name left:(CGFloat)left top:(CGFloat)top
  11. {
  12. UIImage *image = [UIImage imageNamed:name];
  13. return [image stretchableImageWithLeftCapWidth:image.size.width * left topCapHeight:image.size.height * top];
  14. }
  15. /**
  16. * 根据颜色和大小获取Image
  17. *
  18. * @param color 颜色
  19. * @param size 大小
  20. *
  21. */
  22. + (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size
  23. {
  24. UIGraphicsBeginImageContextWithOptions(size, 0, [UIScreen mainScreen].scale);
  25. [color set];
  26. UIRectFill(CGRectMake(0, 0, size.width, size.height));
  27. UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  28. UIGraphicsEndImageContext();
  29. return image;
  30. }
  31. /**
  32. * 根据图片和颜色返回一张加深颜色以后的图片
  33. */
  34. + (UIImage *)colorizeImage:(UIImage *)baseImage withColor:(UIColor *)theColor {
  35. UIGraphicsBeginImageContext(CGSizeMake(baseImage.size.width*2, baseImage.size.height*2));
  36. CGContextRef ctx = UIGraphicsGetCurrentContext();
  37. CGRect area = CGRectMake(0, 0, baseImage.size.width * 2, baseImage.size.height * 2);
  38. CGContextScaleCTM(ctx, 1, -1);
  39. CGContextTranslateCTM(ctx, 0, -area.size.height);
  40. CGContextSaveGState(ctx);
  41. CGContextClipToMask(ctx, area, baseImage.CGImage);
  42. [theColor set];
  43. CGContextFillRect(ctx, area);
  44. CGContextRestoreGState(ctx);
  45. CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
  46. CGContextDrawImage(ctx, area, baseImage.CGImage);
  47. UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
  48. UIGraphicsEndImageContext();
  49. return newImage;
  50. }
  51. /**
  52. * 根据图片返回一张高斯模糊的图片
  53. *
  54. * @param blur 模糊系数
  55. *
  56. * @return 新的图片
  57. */
  58. - (UIImage *)boxblurImageWithBlur:(CGFloat)blur {
  59. NSData *imageData = UIImageJPEGRepresentation(self, 1); // convert to jpeg
  60. UIImage* destImage = [UIImage imageWithData:imageData];
  61. if (blur < 0.f || blur > 1.f) {
  62. blur = 0.5f;
  63. }
  64. int boxSize = (int)(blur * 40);
  65. boxSize = boxSize - (boxSize % 2) + 1;
  66. CGImageRef img = destImage.CGImage;
  67. vImage_Buffer inBuffer, outBuffer;
  68. vImage_Error error;
  69. void *pixelBuffer;
  70. //create vImage_Buffer with data from CGImageRef
  71. CGDataProviderRef inProvider = CGImageGetDataProvider(img);
  72. CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
  73. inBuffer.width = CGImageGetWidth(img);
  74. inBuffer.height = CGImageGetHeight(img);
  75. inBuffer.rowBytes = CGImageGetBytesPerRow(img);
  76. inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
  77. //create vImage_Buffer for output
  78. pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));
  79. if(pixelBuffer == NULL)
  80. NSLog(@"No pixelbuffer");
  81. outBuffer.data = pixelBuffer;
  82. outBuffer.width = CGImageGetWidth(img);
  83. outBuffer.height = CGImageGetHeight(img);
  84. outBuffer.rowBytes = CGImageGetBytesPerRow(img);
  85. // Create a third buffer for intermediate processing
  86. void *pixelBuffer2 = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img));
  87. vImage_Buffer outBuffer2;
  88. outBuffer2.data = pixelBuffer2;
  89. outBuffer2.width = CGImageGetWidth(img);
  90. outBuffer2.height = CGImageGetHeight(img);
  91. outBuffer2.rowBytes = CGImageGetBytesPerRow(img);
  92. //perform convolution
  93. error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer2, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
  94. if (error) {
  95. NSLog(@"error from convolution %ld", error);
  96. }
  97. error = vImageBoxConvolve_ARGB8888(&outBuffer2, &inBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
  98. if (error) {
  99. NSLog(@"error from convolution %ld", error);
  100. }
  101. error = vImageBoxConvolve_ARGB8888(&inBuffer, &outBuffer, NULL, 0, 0, boxSize, boxSize, NULL, kvImageEdgeExtend);
  102. if (error) {
  103. NSLog(@"error from convolution %ld", error);
  104. }
  105. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  106. CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,
  107. outBuffer.width,
  108. outBuffer.height,
  109. 8,
  110. outBuffer.rowBytes,
  111. colorSpace,
  112. (CGBitmapInfo)kCGImageAlphaNoneSkipLast);
  113. CGImageRef imageRef = CGBitmapContextCreateImage (ctx);
  114. UIImage *returnImage = [UIImage imageWithCGImage:imageRef];
  115. //clean up
  116. CGContextRelease(ctx);
  117. CGColorSpaceRelease(colorSpace);
  118. free(pixelBuffer);
  119. free(pixelBuffer2);
  120. CFRelease(inBitmapData);
  121. CGImageRelease(imageRef);
  122. return returnImage;
  123. }
  124. /**
  125. * 自由改变Image的大小
  126. *
  127. * @param size 目的大小
  128. *
  129. * @return 修改后的Image
  130. */
  131. - (UIImage *)cropImageWithSize:(CGSize)size {
  132. float scale = self.size.width/self.size.height;
  133. CGRect rect = CGRectMake(0, 0, 0, 0);
  134. if (scale > size.width/size.height) {
  135. rect.origin.x = (self.size.width - self.size.height * size.width/size.height)/2;
  136. rect.size.width = self.size.height * size.width/size.height;
  137. rect.size.height = self.size.height;
  138. }else {
  139. rect.origin.y = (self.size.height - self.size.width/size.width * size.height)/2;
  140. rect.size.width = self.size.width;
  141. rect.size.height = self.size.width/size.width * size.height;
  142. }
  143. CGImageRef imageRef = CGImageCreateWithImageInRect(self.CGImage, rect);
  144. UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
  145. CGImageRelease(imageRef);
  146. return croppedImage;
  147. }

iOS开发中常用的分类方法---UIImage+Category的更多相关文章

  1. iOS开发中的Html解析方法

    iOS开发中的Html解析方法 本文作者为大家介绍了在iOS开发中的Html解析方法,并同时提供了Demo代码的下载链接,Demo 解析了某个网站(具体可在代码中查看)的html网页,提取了图片以及标 ...

  2. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

  3. iOS开发中常用的数学函数

    iOS开发中常用的数学函数 /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(,)); //result 9 NSLog(,)); //result 27 //开平方 ...

  4. ios开发中常用的也是最基本的mysql语句

    MySQL常用基本SQL语句小结——(转) sql语言不经常用,每次再用都隔好久的时间,以致最基本的都想不起来了,只好转一篇记着= - 找的时候方便 SQL分类:  DDL—数据定义语言(CREATE ...

  5. iOS开发中常用的设计模式

    常用的设计模式(一)代理模式应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则:开放-封闭原则实例:tableview的 数据源delegate,通过 ...

  6. iOS开发中常用的手势---边缘手势

    说明:以下方法是开发中使用的方法,有什么不对的或者好的方法,请多多指教! 此处的边缘手势是用来控制左侧抽屉视图的弹出以及收回. 添加手势 : 页面上有多个手势时需要遵循 UIGestureRecogn ...

  7. IOS开发中常用一下方法

    1.获得屏幕的宽高 [UIScreen mainScreen].bounds.size.width [UIScreen mainScreen].bounds.size.height 2.Iphone版 ...

  8. iOS开发中 常用枚举和常用的一些运算符(易错总结)

    1.色值的随机值: #define kColorValue arc4random_uniform(256)/255.0 // arc4random_uniform(256)/255.0; 求出0.0~ ...

  9. iOS开发中常用的宏

    前言 今天将一些简化工程代码的宏定义拿出来分享一下,自定义一些宏可以有效的简化代码,提高编码效率. Application #define APPLICATION [UIApplication sha ...

随机推荐

  1. IIS7 性能(内存、CPU、当前请求耗时)监测

    程序上线了,但运行过程中如果发现很CPU.内存异常,某些操作耗时,如何在生产环境中监测并查明原因呢,有以下几种工具(方式): 1.NProfiler,这是一个商业软件,有试用周期,可以监测包括Winf ...

  2. FZU Problem 2125 简单的等式

    思路:x绝对小于根号n,再由s(x,m)可以缩小范围.1e9十六进制大约算出每位和相加100左右.这种题直接判断范围再暴力. #include<stdio.h> #include<s ...

  3. Dynamics CRM 2011 2013-(An error occurred while opening mailbox xxx@xx.com Microsoft.Crm.Tools.Email.Providers.)

    An error occurred while opening mailbox  Microsoft.Crm.Tools.Email.Providers. Whenever I check how C ...

  4. 大型机汇编(mainframe assembler/HLASM)之COBOL解惑

    IDENTIFICATION DIVISION.             PROGRAM-ID. HELLO.                   ENVIRONMENT DIVISION.      ...

  5. 易元平台使用-MVC体会

    M:服务-提供数据 V:freemaker-提供显示方式 C:控制器-控制显示方式

  6. Android 各种MIME类型和文件类型的匹配表

    MIME:全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务.它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后 ...

  7. cocos2d-x 2.0 拖尾效果分析

    转自:http://game.dapps.net/gamedev/game-engine/7281.html 在Cocos2d-x中,拖尾效果有一个专门的类CCMotionStreak来实现.下面我们 ...

  8. asp.net C#母版页和内容页事件排版载入顺序生命周期

    asp.net C#母版页和内容页事件排版载入顺序生命周期 关于ASP页面Page_Load发生在事件之前而导致的问题已经喜闻乐见,对于问题的解释也非常全面.可是怎样解决这个问题则较少有人说明,我就再 ...

  9. DelphiTXT文档编辑器

    EXE:http://files.cnblogs.com/xe2011/Text_EditorRelease2013-12-20-185320.rar Delphi XE5 PAS:http://fi ...

  10. 【转】oracle创建表空间

    原文:http://www.cnblogs.com/netsql/articles/1745978.html 注意点: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执 ...