Hãy xem https://github.com/vvbogdan/BVCropPhoto
- (UIImage *) croppingImage {
CGFloat scale = self.sourceImage.size. Thong / self.scrollView.contentSize. Thong;
UIImage * FinalImage = nil;
CGRect targetFrame = CGRectMake ((self.scrollView.contentInset.left + self.scrollView.content Offerset.x) * scale,
(self.scrollView.contentInset.top + self.scrollView.content Offerset.y) * scale,
thang đo self.cropSize. thong *,
thang đo self.cropSize.height *);
CGImageRef bối cảnhImage = CGImageCreateWithImageInRect ([[self imageWithRotation: self.sourceImage] CGImage], targetFrame);
if (bối cảnh! = NULL) {
FinalImage = [UIImage imageWithCGImage: bối cảnh
tỷ lệ: self.sourceImage.scale
định hướng: UIImageOrientationUp];
CGImageRelease (bối cảnh);
}
trả lại hình ảnh cuối cùng;
}
- (UIImage *) imageWithRotation: (UIImage *) image {
if (image.imageOrientation == UIImageOrientationUp) trả lại hình ảnh;
Biến đổi CGAffineTransform = CGAffineTransformIdentity;
chuyển đổi (image.imageOrientation) {
trường hợp UIImageOrientationDown:
trường hợp UIImageOrientationDownMirrored:
biến đổi = CGAffineTransformTranslate (biến đổi, image.size. thong, image.size.height);
biến đổi = CGAffineTransformRotate (biến đổi, M_PI);
phá vỡ;
trường hợp UIImageOrientationLeft:
trường hợp UIImageOrientationLeftMirrored:
biến đổi = CGAffineTransformTranslate (biến đổi, image.size. thong, 0);
biến đổi = CGAffineTransformRotate (biến đổi, M_PI_2);
phá vỡ;
trường hợp UIImageOrientationRight:
trường hợp UIImageOrientationRightMirrored:
biến đổi = CGAffineTransformTransTable (biến đổi, 0, image.size.height);
biến đổi = CGAffineTransformRotate (biến đổi, -M_PI_2);
phá vỡ;
trường hợp UIImageOrientationUp:
trường hợp UIImageOrientationUpMirrored:
phá vỡ;
}
chuyển đổi (image.imageOrientation) {
trường hợp UIImageOrientationUpMirrored:
trường hợp UIImageOrientationDownMirrored:
biến đổi = CGAffineTransformTranslate (biến đổi, image.size. thong, 0);
biến đổi = CGAffineTransformScale (biến đổi, -1, 1);
phá vỡ;
trường hợp UIImageOrientationLeftMirrored:
trường hợp UIImageOrientationRightMirrored:
biến đổi = CGAffineTransformTransTable (biến đổi, image.size.height, 0);
biến đổi = CGAffineTransformScale (biến đổi, -1, 1);
phá vỡ;
trường hợp UIImageOrientationUp:
trường hợp UIImageOrientationDown:
trường hợp UIImageOrientationLeft:
trường hợp UIImageOrientationRight:
phá vỡ;
}
// Bây giờ chúng ta vẽ CGImage cơ bản vào một bối cảnh mới, áp dụng biến đổi
// đã tính ở trên.
CGContextRef ctx = CGBitmapContextCreate (NULL, image.size. Thong, image.size.height,
CGImageGetBitsPerComponent (image.CGImage), 0,
CGImageGetColorSpace (image.CGImage),
CGImageGetBitmapInfo (image.CGImage));
CGContextConcatCTM (ctx, biến đổi);
chuyển đổi (image.imageOrientation) {
trường hợp UIImageOrientationLeft:
trường hợp UIImageOrientationLeftMirrored:
trường hợp UIImageOrientationRight:
trường hợp UIImageOrientationRightMirrored:
// Ơ ...
CGContextDrawImage (ctx, CGRectMake (0, 0, image.size.height, image.size. Thong), image.CGImage);
phá vỡ;
mặc định:
CGContextDrawImage (ctx, CGRectMake (0, 0, image.size. Thong, image.size.height), image.CGImage);
phá vỡ;
}
// Và bây giờ chúng ta chỉ cần tạo một UIImage mới từ bối cảnh vẽ
CGImageRef cgimg = CGBitmapContextCreateImage (ctx);
UIImage * img = [hình ảnh UIImageWithCGImage: cgimg];
CGContextRelease (ctx);
CGImageRelease (cgimg);
trả lại img;
}