Quartz2D练习 -- 裁剪图片分类
Main.storyboard
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVersion="13D65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="vXZ-lx-hvc"> <dependencies> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/> </dependencies> <scenes> <!--View Controller--> <scene sceneID="ufC-wZ-h7g"> <objects> <viewController id="vXZ-lx-hvc" customClass="LWTViewController" sceneMemberID="viewController"> <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS"> <rect key="frame" x="0.0" y="0.0" width="320" height="480"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <subviews> <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="mkN-c5-tVD"> <rect key="frame" x="0.0" y="0.0" width="320" height="480"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> </imageView> </subviews> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> </view> <connections> <outlet property="imageView" destination="mkN-c5-tVD" id="oa0-4P-LEN"/> </connections> </viewController> <placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/> </objects> </scene> </scenes> <simulatedMetricsContainer key="defaultSimulatedMetrics"> <simulatedStatusBarMetrics key="statusBar"/> <simulatedOrientationMetrics key="orientation"/> <simulatedScreenMetrics key="destination"/> </simulatedMetricsContainer> </document>
LWTViewController.h
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#import <UIKit/UIKit.h> @interface LWTViewController : UIViewController @end
LWTViewController.m
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 // 2 // LWTViewController.m 3 // Quartz2D练习 -- 裁剪图片分类 4 // 5 // Created by apple on 14-6-10. 6 // Copyright (c) 2014年 lwt. All rights reserved. 7 // 8 9 #import "LWTViewController.h" 10 #import "UIImage+cutImageRound.h" 11 12 @interface LWTViewController () 13 @property (weak, nonatomic) IBOutlet UIImageView *imageView; 14 15 @end 16 17 @implementation LWTViewController 18 19 - (void)viewDidLoad 20 { 21 [super viewDidLoad]; 22 // Do any additional setup after loading the view, typically from a nib. 23 24 // 获取要裁剪图片 25 UIImage *newImage = [UIImage imageWithImageName:@"scene" margin:20 frameColor:[UIColor magentaColor]]; 26 // 测试图片效果 27 // imageView的size等于图片的size 28 self.imageView.frame = CGRectMake(0, 0, newImage.size.width, newImage.size.height); 29 self.imageView.image = newImage; 30 31 //保存图片 32 // 将图片传承二进制数据 33 NSData *data = UIImagePNGRepresentation(newImage); 34 // 保存图片的地址 35 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"cutImage.png"]; 36 // 保存图片 37 [data writeToFile:path atomically:YES]; 38 39 40 } 41 @end
UIImage+cutImageRound.h
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#import <UIKit/UIKit.h> @interface UIImage (cutImageRound) /** * 将图片裁剪成圆形 * * @param imageName 需要裁剪的图片 * @param margin 相框的尺寸 * @param frameColor 相框的背景颜色 * * @return 返回裁剪好的图片 */ + (UIImage *)imageWithImageName:(NSString *)imageName margin:(CGFloat)margin frameColor:(UIColor *)frameColor; @end
UIImage+cutImageRound.m
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// // UIImage+cutImageRound.m // Quartz2D练习 -- 裁剪图片分类 // // Created by apple on 14-6-10. // Copyright (c) 2014年 lwt. All rights reserved. // #import "UIImage+cutImageRound.h" @implementation UIImage (cutImageRound) + (UIImage *)imageWithImageName:(NSString *)imageName margin:(CGFloat)margin frameColor:(UIColor *)frameColor { // 0. 加载原有图片 UIImage *image = [UIImage imageNamed:imageName]; CGFloat imageW = image.size.width; CGFloat imageH = image.size.height; CGFloat graphW = imageW + 2 * margin; CGFloat graphH = imageH + 2 * margin; // 创建bigmap图形上下文 UIGraphicsBeginImageContextWithOptions(CGSizeMake(graphW, graphH), NO, 0); // 获取图形上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 绘制背景大圆 CGFloat bigX = 0; CGFloat bigY = 0; CGFloat bigW = graphW; CGFloat bigH = graphH; CGContextAddEllipseInRect(ctx, CGRectMake(bigX, bigY, bigW, bigH)); [frameColor set]; CGContextFillPath(ctx); // 绘制剪切园 CGFloat cutX = margin; CGFloat cutY = margin; CGFloat cutW = imageW; CGFloat cutH = imageH; CGContextAddEllipseInRect(ctx, CGRectMake(cutX, cutY, cutW, cutH)); CGContextClip(ctx); // 绘制裁剪图片 CGFloat imageX = cutX; CGFloat imageY = cutY; [image drawInRect:CGRectMake(imageX, imageY, imageW, imageH)]; // 获取绘制好的图片 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); return newImage; } @end