這是攝像頭的覆蓋我的應用程序,如何正確裁剪UIImage與UIImagePickerController?
黃方是表明,只有這一部分(攝像頭)裏面的照片將被保存用戶。這就像莊稼。
當我保存的捕獲映像,它可以節省縮放照片[大變焦的圖片],
我發現了什麼,當我拍了一張照片,這將是的的{2448, 3264}
我裁剪這樣的圖像大小,
- (UIImage *)imageByCroppingImage:(UIImage *)image toSize:(CGSize)size
{
double x = (image.size.width - size.width)/2.0;
double y = (image.size.height - size.height)/2.0;
CGRect cropRect = CGRectMake(x, y, size.height, size.width);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return cropped;
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
if (image) {
UIImage *newImage = [self imageByCroppingImage:image toSize:CGSizeMake(300.f, 300.f)];
UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil);
}
}
注意,
在裁剪之前修正了方向。使用這個,http://pastebin.com/WYUkDLS0
相機上的黃色正方形也是相同的大小,寬度= 300和高度= 300。
如果我將前置攝像頭設置爲
UIImagePickerController
那麼它會給我完美的裁剪圖像輸出。 是的,這真的很奇怪!我試過了這裏的一切,Cropping an UIImage。即使https://github.com/Nyx0uf/NYXImagesKit也無濟於事。
任何想法/建議嗎?
更新:
我也跟着這樣@DrummerB的答案,
CGFloat originalWidth = image.size.width * image.scale;
CGFloat originalHeight = image.size.height * image.scale;
float smallestDimension = fminf(originalWidth, originalHeight);
CGRect square = CGRectMake(0, 0, smallestDimension, smallestDimension);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], square);
UIImage *squareImage = [UIImage imageWithCGImage:imageRef scale:image.scale orientation:image.imageOrientation];
UIImageWriteToSavedPhotosAlbum(squareImage, nil, nil, nil);
CGImageRelease(imageRef);
這是我拍攝的,
它導致我下面,
現在我就在廣場上的照片,但要注意在輸出,還是我理解的黃色方框外的照片。我想要的是得到居住在黃色廣場的照片。拍攝的圖像仍然很大,{w = 2448,h = 3264}。請注意,紅色圓圈表示圖像的外部部分不應包含在輸出中,因爲該部分不在黃色方塊內。
這是怎麼回事?
你需要使用數學的力量。 square.size是screen.size,因爲______是picture.sizeInPixels。 –