我想創建一個像Instagram一樣的相機,用戶可以看到一個盒子並且圖像會裁剪到該盒子。出於某種原因,相機不會一直走到屏幕底部,並在接近尾聲時切斷。我也想知道如何才能將該圖像裁剪成320x320正好在該廣場內?iOS自定義UIImagePickerController相機裁剪到廣場
15
A
回答
38
這裏做到這一點(沒有重新實現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();
}
大功告成
4
@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];`
我希望這可以幫助別人。
+6
我在iPhone 5上使用IOS7的經驗並不好。具體來說,我可以看到覆蓋圖,但我無法使用原生縮放控件。最後,當我拍攝照片並出現「重拍」和「使用照片」按鈕時,我無法點擊任一按鈕。因人而異 –
相關問題
- 1. 用UIImagePickerController iOS的圓形裁剪相機?
- 2. 裁剪視頻到廣場iOS
- 3. UIImageView裁剪廣場
- 4. 裁剪UIImage到中心廣場
- 5. iOS開關相機與UIImagePickerController自定義相機覆蓋視圖
- 6. UIImagePickerController裁剪?
- 7. IOS自定義UIImagePickerController
- 8. UIImagePickerController使用自定義覆蓋圖進行縮放和裁剪
- 9. 自定義相機捕獲的圖像在裁剪後會旋轉iOS
- 10. 在相機模式下自定義UIImagePickerController
- 11. 帆布裁剪圖像定位後的廣場javascript
- 12. NSSlider NSSliderCell剪裁自定義旋鈕
- 13. 自定義矩形的圖像裁剪
- 14. 通過自定義形狀裁剪UIImage
- 15. Android自定義圖像裁剪器
- 16. WPF自定義進度條裁剪
- 17. 自定義圖像裁剪android
- 18. iPhone SDK - 如何使用allowsEditing在UIImagePickerController中自定義裁剪矩形?
- 19. 自定義UIImagePickerController
- 20. iOS版自定義相機的UIImagePickerController作物來圈 - 在預覽視圖
- 21. 更改UIImagePickerController的裁剪大小
- 22. 如何正確裁剪UIImage與UIImagePickerController?
- 23. 從iOS SDK中的相機單擊後手動裁剪UIImage
- 24. 用相機拍攝的iOS裁剪圖像
- 25. 使用基本相機UI的UIImagePickerController的自定義相機視圖?
- 26. 在libgdx中裁剪相機視圖
- 27. 廣場自定義控件控制
- 28. 如何使用UIImagepickercontroller自定義相機屏幕
- 29. 如何獲取UIImagePickerController的相機的自定義投影矩陣
- 30. UIImagePickerController在自定義視圖中不顯示相機
非常感謝!我想知道是否有可以讓相機打開動畫在疊加層之上? – NSDavidObject
不,很遺憾,使用公開記錄的API無法做到這一點(即不做任何會導致Apple拒絕該應用程序的事情)。如果你想這樣做,你需要重新實現'UIImagePickerController'。 – Ander
我們應該改變什麼才能使它在iPhone 5和以前的iPhone手機上都能正常工作? –