AVFoundation кадрировать неподвижное изображение в соответствии с соотношением сторон предварительного просмотра - PullRequest
2 голосов
/ 11 августа 2011

Мой вопрос в основном похож на этот:

Обрезка изображения, полученного с помощью AVCaptureSession

У меня есть приложение, которое использует AVFoundation для захвата неподвижных изображений. Мой AVCaptureVideoPreviewLayer имеет AVLayerVideoGravityResizeAspectFill гравитацию видео, делая таким образом изображение предварительного просмотра, которое показано пользователю для обрезки сверху и снизу.

Когда пользователь нажимает кнопку «Захват», фактически полученное изображение отличается от изображения предварительного просмотра, показанного пользователю. Мой вопрос, как соответственно обрезать захваченное изображение?

Заранее спасибо.

1 Ответ

0 голосов
/ 15 января 2013

Я использовал UIImage+Resize категорию, предоставленную в здесь с некоторыми новыми методами, которые я написал для этой работы. Я переформатировал некоторый код, чтобы он выглядел лучше и не тестировался, но он должен работать. :))

- (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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...