本文转载至 /cuiweijie3/article/details/9514293
转自 http://www.tedz.me/ios/uiimage-crop-resize-image
@interfaceUIImage(UIImageScale) -(UIImage*)getSubImage:(CGRect)rect; -(UIImage*)scaleToSize:(CGSize)size; @end @implementationUIImage(UIImageScale) //截取部分图像 -(UIImage*)getSubImage:(CGRect)rect {CGImageRefsubImageRef=CGImageCreateWithImageInRect(self.CGImage,rect); CGRectsmallBounds=CGRectMake(0,0,CGImageGetWidth(subImageRef),CGImageGetHeight(subImageRef)); UIGraphicsBeginImageContext(smallBounds.size); CGContextRefcontext=UIGraphicsGetCurrentContext(); CGContextDrawImage(context,smallBounds,subImageRef); UIImage*smallImage=[UIImageimageWithCGImage:subImageRef]; UIGraphicsEndImageContext(); returnsmallImage; } //等比例缩放 -(UIImage*)scaleToSize:(CGSize)size {CGFloatwidth=CGImageGetWidth(self.CGImage); CGFloatheight=CGImageGetHeight(self.CGImage); floatverticalRadio=size.height*1.0/height; floathorizontalRadio=size.width*1.0/width; floatradio=1; if(verticalRadio>1&&horizontalRadio>1) {radio=verticalRadio>horizontalRadio?horizontalRadio:verticalRadio; } else {radio=verticalRadio<horizontalRadio?verticalRadio:horizontalRadio; } width=width*radio; height=height*radio; intxPos=(size.width-width)/2; intyPos=(size.height-height)/2; // 创建一个bitmap的context // 并把它设置成为当前正在使用的context UIGraphicsBeginImageContext(size); // 绘制改变大小的图片 [selfdrawInRect:CGRectMake(xPos,yPos,width,height)]; // 从当前context中创建一个改变大小后的图片 UIImage*scaledImage=UIGraphicsGetImageFromCurrentImageContext(); // 使当前的context出堆栈 UIGraphicsEndImageContext(); // 返回新的改变大小后的图片 returnscaledImage; } @end 然后在下面方法里面调用就可以了! -(BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch. UIImage *image=[[UIImagealloc]initWithData:[NSDatadataWithContentsOfURL:[NSURLURLWithString:@"/mg//09/24/112524.53149978.jpg"]] ]; // 裁剪图片 //image = [image getSubImage:CGRectMake(10, 10, 70, 80)]; //等比列缩放 image=[imagescaleToSize:CGSizeMake(200,300)]; UIImageView *imageView=[[UIImageViewalloc]initWithImage:image]; [self.windowaddSubview:imageView]; NSLog(@"image.size:%@",NSStringFromCGSize(CGSizeMake(imageView.image.size.width,imageView.image.size.height)));//打印获取的网络图片的宽度和高度 [self.windowmakeKeyAndVisible]; returnYES; } //--------------截取部分图片到指定位置------------------------- 图片(UIImage*)img 要截取的起始坐标sx:(int)sx1sy:(int)sy1 要截取的长度和宽度sw:(int)sw1sh:(int)sh1 最终要显示的坐标desx:(int)desx1desy:(int)desy1 -(UIImage*)objectiveDrawRegion:(UIImage*)imgsx:(int)sx1sy:(int)sy1sw:(int)sw1sh:(int)sh1desx:(int)desx1desy:(int)desy1{[selfsaveImage:imgname:@"objectiveDrawRegion1.png"]; //创建图片缓冲 void*imageDataRegion=malloc(screenWidth*screenHeight*32); CGColorSpaceRefiColorSpaceRegion=CGColorSpaceCreateDeviceRGB(); CGContextRefiDeviceRegion=CGBitmapContextCreate(imageDataRegion,screenWidth,screenHeight,8,4*screenWidth,iColorSpaceRegion,kCGImageAlphaPremultipliedLast); //剪切区域 CGRectclipRegion=CGRectMake(sx1,sy1,sw1,sh1); CGContextClipToRect(iDeviceRegion,clipRegion); CGFloatwidthf=img.size.width; CGFloatheightf=img.size.height; CGRectcg=CGRectMake(0.0,0.0,widthf,heightf); //画底图 CGContextDrawImage(iDeviceRegion,cg,img.CGImage); //将缓冲形成图片 CGImageRefioffRegion=CGBitmapContextCreateImage(iDeviceRegion); CGRectcg1=CGRectMake(desx1,desy1,sw1,sh1); UIImage *ui=[UIImageimageWithCGImage:ioffRegion]; CGContextDrawImage(当前context,cg1,ui.CGImage); //清除缓冲 CGColorSpaceRelease(iColorSpaceRegion); CGContextRelease(iDeviceRegion); CGImageRelease(ioffRegion); free(imageDataRegion); //iDeviceRegion=NULL; //imageDataRegion=0; returnui; }如果觉得《UIImage 裁剪图片和等比列缩放图片》对你有帮助,请点赞、收藏,并留下你的观点哦!