我的问题与这个问题大多相似:
裁剪 AVCaptureSession 捕获的图像 https://stackoverflow.com/questions/5780580/cropping-image-captured-by-avcapturesession
我有一个使用 AVFoundation 来捕获静态图像的应用程序。我的 AVCaptureVideoPreviewLayer 具有 AVLayerVideoGravityResizeAspectFill 视频重力,从而使向用户显示的预览图片从顶部和底部部分进行裁剪。
当用户按下“捕获”按钮时,实际捕获的图像与向用户显示的预览图片不同。我的问题是如何相应地裁剪捕获的图像?
提前致谢。
I used UIImage+Resize
中提供的类别here https://github.com/jeremybrooks/TestOverlay/blob/master/TestOverlay/UIImage-categories我写了一些新方法来完成这项工作。我重新格式化了一些代码以使其看起来更好并且未经过测试,但它应该可以工作。 :))
- (UIImage*)cropAndResizeAspectFillWithSize:(CGSize)targetSize
interpolationQuality:(CGInterpolationQuality)quality {
UIImage *outputImage = nil;
UIImage *imageForProcessing = self;
// crop center square (AspectFill)
if (self.size.width != self.size.height) {
CGFloat shorterLength = 0;
CGPoint origin = CGPointZero;
if (self.size.width > self.size.height) {
origin.x = (self.size.width - self.size.height)/2;
shorterLength = self.size.height;
}
else {
origin.y = (self.size.height - self.size.width)/2;
shorterLength = self.size.width;
}
imageForProcessing = [imageForProcessing normalizedImage];
imageForProcessing = [imageForProcessing croppedImage:CGRectMake(origin.x, origin.y, shorterLength, shorterLength)];
}
outputImage = [imageForProcessing resizedImage:targetSize interpolationQuality:quality];
return outputImage;
}
// fix image orientation, which may wrongly rotate the output.
- (UIImage *)normalizedImage {
if (self.imageOrientation == UIImageOrientationUp) return self;
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
[self drawInRect:(CGRect){0, 0, self.size}];
UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return normalizedImage;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)