UIImage 裁剪图片和等比列缩放图片
生活随笔
收集整理的這篇文章主要介紹了
UIImage 裁剪图片和等比列缩放图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文轉載至 http://blog.csdn.net/cuiweijie3/article/details/9514293?
轉自 http://www.tedz.me/ios/uiimage-crop-resize-image
?
@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?imageWithCGImage: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 然后在下面方法里面調用就可以了! -?(BOOL)application:(UIApplication *)application?didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ????// Override point for customization after application launch. ????UIImage *image?=?[[UIImage?alloc]?initWithData:[NSData?dataWithContentsOfURL:[NSURLURLWithString:@"http://img21.mtime.cn/mg/2011/09/24/112524.53149978.jpg"]] ]; ????// 裁剪圖片 ????//image = [image getSubImage:CGRectMake(10, 10, 70, 80)]; ????//等比列縮放 ????image?=?[image?scaleToSize:CGSizeMake(200,?300)]; ????UIImageView *imageView?=?[[UIImageView?alloc]?initWithImage:image]; ????[self.window?addSubview:imageView]; ????NSLog(@"image.size:%@",NSStringFromCGSize(CGSizeMake(imageView.image.size.width,?imageView.image.size.height)));???//打印獲取的網絡圖片的寬度和高度 ????[self.window?makeKeyAndVisible]; ????return?YES; } //--------------截取部分圖片到指定位置------------------------- 圖片(UIImage*)?img 要截取的起始坐標sx:(int)?sx1?sy:(int)sy1 要截取的長度和寬度sw:(int)?sw1?sh:(int)?sh1 最終要顯示的坐標desx:(int)?desx1?desy:(int)desy1 -(UIImage*)objectiveDrawRegion:(UIImage*)?img?sx:(int)?sx1?sy:(int)sy1?sw:(int)?sw1?sh:(int)?sh1?desx:(int)?desx1?desy:(int)desy1{ [self?saveImage:img?name:@"objectiveDrawRegion1.png"]; //創建圖片緩沖 void?*imageDataRegion=malloc(screenWidth*screenHeight*32); CGColorSpaceRef?iColorSpaceRegion=CGColorSpaceCreateDeviceRGB(); ????CGContextRefiDeviceRegion=CGBitmapContextCreate(imageDataRegion,screenWidth,screenHeight,8,4*screenWidth,iColorSpaceRegion,kCGImageAlphaPremultipliedLast); //剪切區域 ????CGRect?clipRegion=CGRectMake(sx1,sy1,sw1,sh1); ????CGContextClipToRect(iDeviceRegion,?clipRegion); ????CGFloat?widthf=img.size.width; ????CGFloat?heightf=img.size.height; CGRect??cg=CGRectMake(0.0,?0.0,?widthf,?heightf); //畫底圖 ????CGContextDrawImage(iDeviceRegion,cg,?img.CGImage); //將緩沖形成圖片 ????CGImageRef?ioffRegion=CGBitmapContextCreateImage(iDeviceRegion); CGRect??cg1=CGRectMake(desx1,?desy1,?sw1,?sh1); UIImage *ui=[UIImage?imageWithCGImage:ioffRegion]; CGContextDrawImage(當前context,cg1,?ui.CGImage); //清除緩沖 ???CGColorSpaceRelease(iColorSpaceRegion); ???CGContextRelease(iDeviceRegion); ???CGImageRelease(ioffRegion); ???free(imageDataRegion); //????iDeviceRegion=NULL; //????imageDataRegion=0; return?ui; }轉載于:https://www.cnblogs.com/Camier-myNiuer/p/4445400.html
總結
以上是生活随笔為你收集整理的UIImage 裁剪图片和等比列缩放图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql条件触发器实例_mysql 触
- 下一篇: Face3D学习笔记(3)3DMM示例源