Próbuję stworzyć kamerę taką jak Instagram, gdzie użytkownik może zobaczyć pudełko, a obrazek zostanie przycięty do tego pudełka. Z jakiegoś powodu kamera nie dociera do końca ekranu i kończy się w pobliżu końca. Zastanawiam się też, w jaki sposób chciałbym przyciąć obraz dokładnie 320x320 dokładnie w tym kwadracie?iOS Niestandardowy UIImagePickerController Przycinanie kamery do kwadratu
Odpowiedz
Oto najprostszy sposób to zrobić (bez reimplementing UIImagePickerController
). Najpierw użyj nakładki, aby pole kamery wyglądało na kwadratowe. Oto przykład dla 3,5" ekrany (trzeba by go zaktualizować do pracy dla 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];
Następnie, po uzyskać obraz z powrotem od UIImagePickerController
, przycinać je do kwadratu z czymś takim :.
//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();
}
I skończysz
@Anders odpowiedź była bardzo zbliżona do skorygowania za mną na iPhone 5. zrobiłem następującą modyfikację aby dodać nakładkę ustalony dla 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];`
Mam nadzieję, że to pomoże komuś.
Moje doświadczenia z tym na IOS7 na iPhone 5 nie były świetne. konkretnie mogłem zobaczyć nakładkę, ale nie mogłem użyć natywnej kontroli zoomu. w końcu, kiedy zrobiłem zdjęcie i pojawiły się przyciski "Ponów" i "Użyj zdjęcia", nie mogłem kliknąć żadnego przycisku. YMMV –
- 1. UIImagePickerController Robienie zdjęć z kamery - domyślnie do kwadratu
- 2. Przycinanie obrazu do kwadratu - Android
- 3. Przycinanie programu WebImage do kwadratu
- 4. iOS: Kadrowanie obrazu nieruchomego pobranego z kamery UIImagePickerController z nakładką
- 5. Jak korzystać z wbudowanej kamery iOS bez użycia UIImagePickerController
- 6. Jak utworzyć niestandardowy UIImagePickerController ze zdjęciami pełnoekranowe iOS
- 7. iOS 8 UIImagePickerController zawiesza się na Zoom
- 8. UIImagePickerController do filmu Pozycja
- 9. Kształt animacji iOS iOS od koła do kwadratu
- 10. iOS: orientacja kamery
- 11. Przycinanie obrazu do kwadratu przy użyciu wartości procentowych i maksymalnych szerokości
- 12. UIImagePickerController nie pełny ekran
- 13. Android: Jak utworzyć niestandardowy widget podglądu kamery?
- 14. Blokuj UIImagePickerController w trybie portretowym w aplikacji ios
- 15. Awaria UIImagePickerController tylko na iOS 7 - iPad
- 16. UIImagePickerController na iOS 7: Tryb kwadratowy?
- 17. iOS: FBSDKShareDialog niestandardowy komunikat
- 18. Przycinanie Picasso do widoku
- 19. iOS7 UIImagePickerController allowsEditing nie działa poprawnie
- 20. Jak dodać przycisk biblioteki zdjęć na UIImagePickerController?
- 21. iOS: Widok niestandardowy z Xib
- 22. Niestandardowy budzik iOS jest możliwy?
- 23. Niestandardowy licznik czasu niestandardowego iOS
- 24. iOS: Przechwyć obraz z kamery skierowanej do przodu
- 25. Dodawanie przycisku "Wybierz z biblioteki zdjęć" do paska narzędzi UIImagePickerController
- 26. Samouczek UIImagePickerController?
- 27. Jak zniekształcić obraz do dowolnego kwadratu?
- 28. Swift: przycinanie i eksportowanie wideo
- 29. Przycinanie do twarzy z wykrywaniem twarzy
- 30. Szybkie obliczanie kwadratu binarnego
Dzięki działa świetnie! Zastanawiam się, czy jest coś, co mogę zrobić, aby animacja otwierająca kamerę pojawiła się na wierzchu nakładki? – NSDavidObject
Nie, niestety nie ma sposobu, aby zrobić to za pomocą publicznie udokumentowanych interfejsów API (tj. Bez robienia czegoś, co spowodowałoby odrzucenie aplikacji przez Apple). Jeśli chcesz to zrobić, musisz ponownie zaimplementować 'UIImagePickerController'. – Ander
Co powinniśmy zmienić, aby działał zarówno na iPhone 5, jak i na poprzednich? –