//
// 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