閱讀176 返回首頁    go 技術社區[雲棲]


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

  上一篇:go Spring10種常見異常解決方法
  下一篇:go Spark技術內幕:Worker源碼與架構解析