Tôi đang cố gắng tạo một máy ảnh như Instagram nơi người dùng có thể nhìn thấy một hộp và hình ảnh sẽ cắt thành hộp đó. Đối với một số lý do máy ảnh không đi tất cả các cách để dưới cùng của màn hình và cắt đứt gần cuối. Tôi cũng tự hỏi làm thế nào tôi sẽ đi về cắt hình ảnh để được 320x320 chính xác bên trong hình vuông đó?Máy ảnh UIImagePickerController tùy chỉnh iOS Cắt thành hình vuông
Trả lời
Dưới đây là cách dễ nhất để làm điều đó (không reimplementing UIImagePickerController
). Đầu tiên, sử dụng lớp phủ để làm cho trường máy ảnh trông vuông. Dưới đây là một ví dụ cho 3,5" màn hình (bạn sẽ cần phải cập nhật nó để làm việc cho 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];
Sau đó, sau khi bạn nhận được một bức tranh trở lại từ UIImagePickerController
, cắt nó thành một hình vuông với một cái gì đó như thế này :.
//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();
}
Và bạn đã hoàn tất
@Anders câu trả lời là rất chặt chẽ để điều chỉnh đối với tôi trên iPhone 5. tôi đã thay đổi sau đây để thêm lớp phủ hardcoded cho 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];`
Tôi hy vọng điều này sẽ giúp ai đó.
Trải nghiệm của tôi về điều này trên IOS7 trên iPhone 5 không tuyệt vời. cụ thể, tôi có thể thấy lớp phủ, nhưng tôi không thể sử dụng các điều khiển thu phóng gốc. cuối cùng, khi tôi chụp ảnh và các nút "Retake" và "Use Photo", xuất hiện, tôi không thể nhấp vào một trong hai nút. YMMV –
- 1. UIImagePickerController - ảnh cây trồng thành hình vuông (theo chiều dọc)
- 2. Làm thế nào để loại bỏ xén tỷ lệ hình vuông cho hình ảnh trên IOS
- 3. UIImagePickerController với nguồn máy ảnh cho phép chỉnh sửa có: video cắt tỉa không hoạt động
- 4. iOS - hình ảnh tùy chỉnh cho UISlider
- 5. Hình ảnh UIButton tùy chỉnh iOS
- 6. Cắt hình vuông thành hình tròn - Lập trình
- 7. Làm thế nào để tạo ra một UIImagePickerController tùy chỉnh với hình ảnh toàn màn hình ios
- 8. Tùy chỉnh nút quay lại cho UIImagePickerController?
- 9. Cắt hình ảnh thành hình vuông theo tỷ lệ phần trăm và chiều rộng tối đa
- 10. Kích cỡ cây trồng tùy chỉnh trong UIImagePickerController
- 11. Cắt ảnh bằng CGImageCreateWithImageInRect
- 12. API cắt hình ảnh cho iOS
- 13. Đặt mức thu phóng tối thiểu cho cắt xén UIImagePickerController
- 14. cách thay đổi khung cắt UIImagePickerController
- 15. iOS: Lưu hình ảnh với độ phân giải tùy chỉnh
- 16. iOS Colorwithpattern - sử dụng hình ảnh iPhone5 tùy chỉnh
- 17. IOS: Thêm hình ảnh vào tùy chỉnh MKAnnotationview
- 18. Máy ảnh tùy chỉnh android
- 19. UIImagePickerController Cropping?
- 20. Hình ảnh cắt xén phía máy khách
- 21. iOS 5 thanh tùy chỉnh hình ảnh thanh tab tùy chỉnh theo chiều dọc
- 22. Bắt hình ảnh từ UIImagePickerController
- 23. ImageMagick - Thay đổi kích thước hình ảnh thành hình vuông
- 24. Làm cho hình ảnh vuông
- 25. API tìm kiếm tùy chỉnh của Google cho hình ảnh vuông
- 26. Điều khiển camera iPhone tùy chỉnh (không sử dụng UIImagePickerController)
- 27. Chế độ xem ảnh tùy chỉnh
- 28. Hình ảnh tùy chỉnh nút hủy UISearchbar
- 29. Hình ảnh Hộp kiểm Tuỳ chỉnh bị cắt
- 30. SVG - Làm thế nào để cắt ảnh thành hình tròn?
Cảm ơn tác phẩm tuyệt vời! Tôi đã tự hỏi nếu có anyway tôi có thể làm cho hình ảnh động mở camera đi trên đầu trang của lớp phủ? – NSDavidObject
Không, thật không may là không có cách nào để thực hiện việc này bằng cách sử dụng API được ghi tài liệu công khai (nghĩa là không làm điều gì đó có thể khiến Apple từ chối Ứng dụng). Nếu bạn muốn làm điều này bạn đúng, bạn sẽ cần phải reimplement 'UIImagePickerController'. – Ander
Chúng ta nên thay đổi điều gì để nó hoạt động trên cả iPhone 5 và các điện thoại trước? –