176
技術社區[雲棲]
UIImage擴展
// // UIImage+Scale.h // CloudShopping // // Created by sixiaobo on 14-7-8. // Copyright (c) 2014年 com.Uni2uni. All rights reserved. // #import <UIKit/UIKit.h> /*! * @brief * @author huangyibiao */ @interface UIImage (Scale) /*! * @brief 根據指定的Rect來截取圖片,返回截取後的圖片 * @param rect 指定的Rect,如果大小超過圖片大小,就會返回原圖片 * @return 返回截取後的圖片 */ - (UIImage *)subImageWithRect:(CGRect)rect; /*! * @brief 把圖片等比例縮放到指定的size * @param size 縮放後的圖片的大小 * @return 返回縮放後的圖片 */ - (UIImage *)scaleToSize:(CGSize)size; @end
// // UIImage+Scale.m // CloudShopping // // Created by sixiaobo on 14-7-8. // Copyright (c) 2014年 com.Uni2uni. All rights reserved. // #import "UIImage+Scale.h" @implementation UIImage (Scale) #pragma mark - 截取部分圖像 - (UIImage *)subImageWithRect:(CGRect)rect { CGImageRef subImageRef = CGImageCreateWithImageInRect(self.CGImage, rect); CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef)); UIGraphicsBeginImageContext(smallBounds.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextDrawImage(context, smallBounds, subImageRef); UIImage* smallImage = [UIImage imageWithCGImage:subImageRef]; UIGraphicsEndImageContext(); return smallImage; } #pragma mark - 等比例縮放 - (UIImage *)scaleToSize:(CGSize)size { CGFloat width = CGImageGetWidth(self.CGImage); CGFloat height = CGImageGetHeight(self.CGImage); float verticalRadio = size.height * 1.0 / height; float horizontalRadio = size.width * 1.0 / width; float radio = 1; if(verticalRadio > 1 && horizontalRadio > 1) { radio = verticalRadio > horizontalRadio ? horizontalRadio : verticalRadio; } else { radio = verticalRadio < horizontalRadio ? verticalRadio : horizontalRadio; } width = width * radio; height = height * radio; int xPos = (size.width - width) / 2; int yPos = (size.height - height) / 2; // 創建一個bitmap的context // 並把它設置成為當前正在使用的context UIGraphicsBeginImageContext(size); // 繪製改變大小的圖片 [self drawInRect:CGRectMake(xPos, yPos, width, height)]; // 從當前context中創建一個改變大小後的圖片 UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); // 使當前的context出堆棧 UIGraphicsEndImageContext(); // 返回新的改變大小後的圖片 return scaledImage; } @end
最後更新:2017-04-03 05:39:42