Я пытаюсь создать такую камеру, как Instagram, где пользователь может видеть окно, и изображение будет обрезано в этом поле. По какой-то причине камера не доходит до нижней части экрана и отключается ближе к концу. Мне также интересно, как я могу обрезать изображение размером 320x320 именно внутри этой площади?iOS Custom UIImagePickerController Camera Crop to Square
ответ
Вот самый простой способ сделать это (без реализовав UIImagePickerController
). Во-первых, используйте наложение, чтобы поле камеры выглядело квадратным. Вот пример для 3.5" экранов (вам нужно обновить его, чтобы работать на iPhone 5):
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = source;
if (source == UIImagePickerControllerSourceTypeCamera) {
//Create camera overlay
CGRect f = imagePickerController.view.bounds;
f.size.height -= imagePickerController.navigationBar.bounds.size.height;
CGFloat barHeight = (f.size.height - f.size.width)/2;
UIGraphicsBeginImageContext(f.size);
[[UIColor colorWithWhite:0 alpha:.5] set];
UIRectFillUsingBlendMode(CGRectMake(0, 0, f.size.width, barHeight), kCGBlendModeNormal);
UIRectFillUsingBlendMode(CGRectMake(0, f.size.height - barHeight, f.size.width, barHeight), kCGBlendModeNormal);
UIImage *overlayImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *overlayIV = [[UIImageView alloc] initWithFrame:f];
overlayIV.image = overlayImage;
[imagePickerController.cameraOverlayView addSubview:overlayIV];
}
imagePickerController.delegate = self;
[self presentViewController:imagePickerController animated:YES completion:nil];
Затем, после того, как вы получите картину назад от UIImagePickerController
, обрезать его на площади с чем-то вроде этого :.
//Crop the image to a square
CGSize imageSize = image.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;
if (width != height) {
CGFloat newDimension = MIN(width, height);
CGFloat widthOffset = (width - newDimension)/2;
CGFloat heightOffset = (height - newDimension)/2;
UIGraphicsBeginImageContextWithOptions(CGSizeMake(newDimension, newDimension), NO, 0.);
[image drawAtPoint:CGPointMake(-widthOffset, -heightOffset)
blendMode:kCGBlendModeCopy
alpha:1.];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
И вы сделали
@Anders ответ был очень близок, чтобы исправить меня на iPhone 5. Я сделал следующее изменение, чтобы добавить наложение жёстко для iPhone 5:
CGRect f = imagePickerController.view.bounds;
f.size.height -= imagePickerController.navigationBar.bounds.size.height;
UIGraphicsBeginImageContext(f.size);
[[UIColor colorWithWhite:0 alpha:.5] set];
UIRectFillUsingBlendMode(CGRectMake(0, 0, f.size.width, 124.0), kCGBlendModeNormal);
UIRectFillUsingBlendMode(CGRectMake(0, 444, f.size.width, 52), kCGBlendModeNormal);
UIImage *overlayImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *overlayIV = [[UIImageView alloc] initWithFrame:f];
overlayIV.image = overlayImage;
overlayIV.alpha = 0.7f;
[imagePickerController setCameraOverlayView:overlayIV];`
Надеюсь, это поможет кому-то.
Мой опыт работы с этим на IOS7 на iPhone 5 был невелик. в частности, я мог видеть оверлей, но я не мог использовать собственные средства масштабирования. наконец, когда я взял фотографию и кнопки «Повторить» и «Использовать фотографию», появилось, я не смог нажать любую кнопку. YMMV –
- 1. VideoView crop to square
- 2. Crop UIImage to square часть
- 3. Crop square image to circle - Programmatically
- 4. Crop thumbnail image to square в Codeigniter
- 5. CarrierWave + RMagick Square Crop?
- 6. Crop camera preview
- 7. iOS 8 Ошибка с UIImagePickerController Image Crop
- 8. iOS 7 UIImagePickerController Camera No Image
- 9. UIIMagePickerController + Camera + полноэкранный снимок фото
- 10. Crop square image in matlab
- 11. ImageMagick Crop Square from Circle?
- 12. UIImagePickerController custom overlay и tap-to-focus
- 13. Crop Square in iOS 8 UIImagepicker off-center
- 14. IOS Take Picture with Custom Camera View
- 15. UIImagePickerController camera blank snapshot image
- 16. Crop Square UIImage в Rounded Rect
- 17. Crop bitmap -custom
- 18. UIImagePickerController Camera Shutter не открывается
- 19. IOS Пользовательские UIImagePickerController Crop камеры в круг - в целях предварительного
- 20. Crop Photo with Custom Shape
- 21. Cordova Custom Camera Plugin
- 22. ios share extension camera
- 23. ios Camera app swift 3
- 24. iOS Camera Overlay Capture Image
- 25. UIImagePickerController Camera Source, приводящий к сбою приложения
- 26. Trigger Custom Android Camera Online
- 27. android custom camera stretched surfaceview
- 28. Capture picture on volume up custom camera overlay ios
- 29. Crop Image swift ios
- 30. ios open camera image from roll
Спасибо, что работает отлично! Мне было интересно, если в любом случае я могу сделать анимацию открытия камеры сверху поверх наложения? – NSDavidObject
Нет, к сожалению, это невозможно сделать с помощью публично документированных API (т. Е. Не делать что-то, что может заставить Apple отклонить приложение). Если вы хотите сделать это правильно, вам нужно будет переопределить 'UIImagePickerController'. – Ander
Что мы должны изменить, чтобы он работал как на iphone 5, так и на предыдущих iPhone? –