Sto provando a creare una macchina fotografica come Instagram in cui l'utente può vedere una finestra e l'immagine verrà ritagliata in quella casella. Per qualche motivo la fotocamera non va fino in fondo allo schermo e si spegne verso la fine. Mi sto anche chiedendo come fare per ritagliare l'immagine per essere esattamente 320x320 all'interno di quella casella?iOS Custom UIImagePickerController Camera Crop to Square
risposta
Ecco il modo più semplice per farlo (senza reimplementare UIImagePickerController
). Innanzitutto, utilizzare una sovrapposizione per rendere quadrato il campo della telecamera. Ecco un esempio per schermo di 3,5" (avresti bisogno di aggiornarlo a lavorare per 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];
Poi, dopo aver ottenuto un immagine indietro dal UIImagePickerController
, raccolto a una piazza con qualcosa di simile :.
//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();
}
E il gioco è fatto
@Anders risposta è stata molto vicina a correggere per me su iPhone 5. ho fatto la seguente modifica per aggiungere una sovrapposizione hardcoded per 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];`
Spero che questo aiuti qualcuno.
La mia esperienza con questo su IOS7 su un iPhone 5 non era eccezionale. in particolare, ho potuto vedere l'overlay, ma non ho potuto usare i controlli di zoom nativi. infine, quando ho scattato la foto, i pulsanti "Retake" e "Use Photo" sono apparsi, non sono stato in grado di fare clic su nessuno dei due pulsanti. YMMV –
- 1. Custom Square LinearLayout. Come?
- 2. Custom camera android
- 3. Immagine catturata da fotocamera Android con crop camera
- 4. Come scattare diverse immagini da Camera ios
- 5. iOS 8: AVFoundation Camera Fermo
- 6. Camera Pitch/Yaw to Direction Vector
- 7. Memory Warning UIImagepickerController IOS 7
- 8. Crop per SpatialPolygonsDataFrame
- 9. Square ImageView
- 10. NativeScript: custom telecamera
- 11. UIImagePickerController cameraViewTransform funziona in modo diverso in iOS 4
- 12. UIImagePickerController su iOS 7: modalità quadrata?
- 13. salvataggio video; usando UIImagePickerController; IOS 8 Swift
- 14. PHP Image Crop Issue
- 15. PHP GD - Crop Shape
- 16. Crop in cerchio (php)
- 17. d3js Tree square
- 18. Angular JS Image Crop Directive
- 19. iphone camera show focus rettangle
- 20. ngCordova Camera - Scatta foto quadrate come instagram (iOS)?
- 21. Utilizzando UIImagePickerController in UIView
- 22. Come utilizzare la videocamera iOS integrata senza utilizzare UIImagePickerController
- 23. iOS 8 UIImagePickerController che si arresta su Zoom
- 24. lock UIImagePickerController in modalità Portrait in app ios
- 25. iOS 8 UIImagePickerController ha un'anteprima nera in modalità Landscape
- 26. FloatingActionButton Shadow Cut by Square
- 27. Includi UIImagePickerController in una vista
- 28. Come localizzare UIImagePickerController
- 29. Custom Annotation Seaborn Heatmap
- 30. UIImagePickerController Ritaglio?
Grazie funziona alla grande! Mi stavo chiedendo se è possibile comunque che l'animazione di apertura della videocamera vada sopra l'overlay? – NSDavidObject
No, sfortunatamente non c'è modo di farlo usando API pubblicamente documentate (cioè senza fare qualcosa che potrebbe far sì che Apple respinga l'App). Se si volesse fare ciò correttamente, sarebbe necessario reimplementare 'UIImagePickerController'. – Ander
Cosa dovremmo cambiare per farlo funzionare su iPhone 5 e su iPhone precedenti? –