有时候项目里做头像上传时候,必须要把用户从相册或是相机里的选择的图片剪切为指定大小的图片,遇到太大,太小或是太长的图片就需coregraphic来对图片进行剪切
废话不多说,直接上代码
- /**
- * 剪切图片为正方形
- *
- * @param image 原始图片比如size大小为(400x200)pixels
- * @param newSize 正方形的size比如400pixels
- *
- * @return 返回正方形图片(400x400)pixels
- */
- - (UIImage *)squareImageFromImage:(UIImage *)image scaledToSize:(CGFloat)newSize {
- CGAffineTransform scaleTransform;
- CGPoint origin;
- if (image.size.width > image.size.height) {
- //image原始高度为200,缩放image的高度为400pixels,所以缩放比率为2
- CGFloat scaleRatio = newSize / image.size.height;
- scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);
- //设置绘制原始图片的画笔坐标为CGPoint(-100, 0)pixels
- origin = CGPointMake(-(image.size.width - image.size.height) / 2.0f, 0);
- } else {
- CGFloat scaleRatio = newSize / image.size.width;
- scaleTransform = CGAffineTransformMakeScale(scaleRatio, scaleRatio);
- origin = CGPointMake(0, -(image.size.height - image.size.width) / 2.0f);
- }
- CGSize size = CGSizeMake(newSize, newSize);
- //创建画板为(400x400)pixels
- if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
- UIGraphicsBeginImageContextWithOptions(size, YES, 0);
- } else {
- UIGraphicsBeginImageContext(size);
- }
- CGContextRef context = UIGraphicsGetCurrentContext();
- //将image原始图片(400x200)pixels缩放为(800x400)pixels
- CGContextConcatCTM(context, scaleTransform);
- //origin也会从原始(-100, 0)缩放到(-200, 0)
- [image drawAtPoint:origin];
- //获取缩放后剪切的image图片
- image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return image;
- }