Https://github.com/vvbogdan/BVCropPhoto को देखें
- (UIImage *) क्रॉपइमेज {
CGFloat पैमाना = self.sourceImage.size. उपलब्धता / self.scrollView.contentSize. उपलब्धता;
UIImage * finalImage = nil;
CGRect targetFrame = CGRectMake ((self.scrollView.contentInset.left + self.scrollView.contentOffset.x) * स्केल
(self.scrollView.contentInset.top + self.scrollView.contentOffset.y) * स्केल
self.cropSize.width * स्केल,
self.cropSize.height * स्केल);
CGImageRef referenceImage = CGImageCreateWithImageInRect ([[सेल्फ इमेजथ्रोटेशन: self.sourceImage] CGImage], targetFrame);
अगर (संदर्भ)! = NULL) {
FinalImage = [UIImage imageWithCGImage: referenceImage
पैमाने: self.sourceImage.scale
उन्मुखीकरण: UIImageOrientationUp];
CGImageRelease (contextImage);
}
रिटर्न फाइनल
}
- (UIImage *) छविवितरण: (UIImage *) छवि {
if (image.imageOrientation == UIImageOrientationUp) वापसी छवि;
CGAffineTransform रूपांतर = CGAffineTransformIdentity;
स्विच (image.imageOrientation) {
मामला UIImageOrientationDown:
मामला UIImageOrientationDownMirrored:
ट्रांस्फ़ॉर्म = CGAffineTransformTranslate (रूपांतर, image.size.width, image.size.height);
बदलना = CGAffineTransformRotate (परिवर्तन, M_PI);
टूटना;
मामला UIImageOrientationLeft:
मामला UIImageOrientationLeftMirrored:
ट्रांस्फ़ॉर्म = CGAffineTransformTranslate (रूपांतर, छवि। आकार, जोखिम, 0);
बदलना = CGAffineTransformRotate (परिवर्तन, M_PI_2);
टूटना;
मामला UIImageOrientationRight:
मामला UIImageOrientationRightMirrored:
ट्रांस्फ़ॉर्म = CGAffineTransformTranslate (रूपांतर, 0, छवि। आकार)
बदलना = CGAffineTransformRotate (परिवर्तन, -M_PI_2);
टूटना;
मामला UIImageOrientationUp:
मामला UIImageOrientationUpMirrored:
टूटना;
}
स्विच (image.imageOrientation) {
मामला UIImageOrientationUpMirrored:
मामला UIImageOrientationDownMirrored:
ट्रांस्फ़ॉर्म = CGAffineTransformTranslate (रूपांतर, छवि। आकार, जोखिम, 0);
बदलना = CGAffineTransformScale (परिवर्तन, -1, 1);
टूटना;
मामला UIImageOrientationLeftMirrored:
मामला UIImageOrientationRightMirrored:
ट्रांस्फ़ॉर्म = CGAffineTransformTranslate (रूपांतर, छवि। साइज़। हाइट, 0);
बदलना = CGAffineTransformScale (परिवर्तन, -1, 1);
टूटना;
मामला UIImageOrientationUp:
मामला UIImageOrientationDown:
मामला UIImageOrientationLeft:
मामला UIImageOrientationRight:
टूटना;
}
// अब हम ट्रांसफॉर्मेशन को लागू करते हुए अंतर्निहित CGImage को एक नए संदर्भ में आकर्षित करते हैं
// ऊपर की गणना।
CGContextRef ctx = CGBitmapContextCreate (NULL, image.size.width, image.size.height)
CGImageGetBitsPerComponent (image.CGImage), 0,
CGImageGetColorSpace (image.CGImage),
CGImageGetBitmapInfo (image.CGImage));
CGContextConcatCTM (ctx, transform);
स्विच (image.imageOrientation) {
मामला UIImageOrientationLeft:
मामला UIImageOrientationLeftMirrored:
मामला UIImageOrientationRight:
मामला UIImageOrientationRightMirrored:
// जीआरआर ...
CGContextDrawImage (ctx, CGRectMake (0, 0, image.size.height, image.size. उपलब्धता), image.CGImage);
टूटना;
चूक:
CGContextDrawImage (ctx, CGRectMake (0, 0, image.size.width, image.size.height), image.CGImage);
टूटना;
}
// और अब हम सिर्फ ड्राइंग संदर्भ से एक नया UIImage बनाते हैं
CGImageRef cgimg = CGBitmapContextCreateImage (ctx);
UIImage * img = [UIImage imageWithCGImage: cgimg];
CGContextRelease (ctx);
CGImageRelease (cgimg);
वापसी img;
}