我正在使用该库 linked here使用以下代码调整摄像头捕获的图像大小:
UIImage *image = [[UIImage alloc] initWithData:imageData];
CGFloat squareLength = SC_APP_SIZE.width;
CGFloat headHeight = _previewLayer.bounds.size.height - squareLength;//_previewLayer的frame是(0, 44, 320, 320 + 44)
CGSize size = CGSizeMake(squareLength * 2, squareLength * 2);
UIImage *scaledImage = [image resizedImageWithContentMode:UIViewContentModeScaleAspectFill bounds:size interpolationQuality:kCGInterpolationHigh];
CGRect cropFrame = CGRectMake((scaledImage.size.width - size.width) / 2, (scaledImage.size.height - size.height) / 2 + headHeight, size.width, size.height);
UIImage *croppedImage = [scaledImage croppedImage:cropFrame];
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
if (orientation != UIDeviceOrientationPortrait) {
CGFloat degree = 0;
if (orientation == UIDeviceOrientationPortraitUpsideDown) {
degree = 180;// M_PI;
} else if (orientation == UIDeviceOrientationLandscapeLeft) {
degree = -90;// -M_PI_2;
} else if (orientation == UIDeviceOrientationLandscapeRight) {
degree = 90;// M_PI_2;
}
croppedImage = [croppedImage rotatedByDegrees:degree];
}
当通过相机拍摄图像时,无论使用何种方向,后置摄像头或前置摄像头,代码均可正常工作。
问题当我使用相同的代码(获取图像的exif方向而不是设备方向)时,会发生最初由相机拍摄但通过iOS相机胶卷访问的图像。 p>
情况:当倒车摄像头以横向方向拍摄保存在相机胶卷中的图像时。实际上,图像获得了一个exif方向,表明它是以纵向模式捕获的...但它仍然是宽屏图像。
代码不成比例地裁剪图像,在边缘留下黑色的空白条。我无法弄清楚问题是什么。有人能指出我正确的方向吗?