[英]Convert a UIImage to a CIImage to crop to a CGRect. AVFoundation
所以我有一個要裁剪的UIImage。 我查看並找到CIImage的imageByCroppingToRect
方法。 因此,我將數據轉換為CIImage而不是UIImage,使用指定的方法對其進行裁剪,然后將結果CIImage轉換為UIImage,然后在UIImageView中顯示。
我的代碼是
NSData *data = [[NSData alloc]initWithData:[def objectForKey:@"imageData"]];
//UIImage *normalImage = [[UIImage alloc]initWithData:data];
CIImage *originalImage = [CIImage imageWithData:data];
[originalImage imageByCroppingToRect:CGRectMake(10, 72, 300, 300)];
self.imageView.image = [UIImage imageWithCIImage:originalImage];
問題是圖像旋轉了90度,但不確定是否被裁剪。 該圖像是使用設備的相機捕獲的。 我使用AVFoundation訪問攝像機。 我的會話預設為AVCaptureSessionPresetPhoto
。 我認為這就是為什么我得到變焦。
CGRect rect = CGRectMake(10, 72, 300, 300);
CGImageRef imref = CGImageCreateWithImageInRect([yourOriginalImage CGImage], rect);
UIImage *newSubImage = [UIImage imageWithCGImage:imref];
嘗試這個。 可能會幫助你。
編輯:
首先修復您的圖像方向:refs: https : //github.com/j3r3miah/mapmatic-ios/blob/master/Mapmatic/UIImage+FixOrientation.m
然后使用上面的代碼將圖像裁剪為“指定矩形”。
並不是您問題的答案,而是您問題的答案
https://github.com/mbcharbonneau/UIImage-Categories
特別是這個文件: https : //github.com/mbcharbonneau/UIImage-Categories/blob/master/UIImage%2BResize.m
- (UIImage *)croppedImage:(CGRect)bounds {
CGFloat scale = MAX(self.scale, 1.0f);
CGRect scaledBounds = CGRectMake(bounds.origin.x * scale, bounds.origin.y * scale, bounds.size.width * scale, bounds.size.height * scale);
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], scaledBounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:UIImageOrientationUp];
CGImageRelease(imageRef);
return croppedImage;
}
您將找到裁剪圖像所需的一切
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.