@interface UIImage(UIImageScale)
-( UIImage*)getSubImage:( CGRect)rect;
-( UIImage*)scaleToSize:( CGSize)size;
@end
 
@implementation UIImage(UIImageScale)
 
//截取部分图像
-( UIImage*)getSubImage:( 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 p_w_picpathWithCGImage:subImageRef];
    UIGraphicsEndImageContext ();
    return smallImage;
}
 
//等比例缩放
-( 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