2014-07-02 104 views
1

這是攝像頭的覆蓋我的應用程序,如何正確裁剪UIImage與UIImagePickerController?

enter image description here

黃方是表明,只有這一部分(攝像頭)裏面的照片將被保存用戶。這就像莊稼。

當我保存的捕獲映像,它可以節省縮放照片[大變焦的圖片],

enter image description here

我發現了什麼,當我拍了一張照片,這將是的的{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); 
    } 
} 

注意,

任何想法/建議嗎?


更新:

從這個問題,Trying to crop my UIImage to a 1:1 aspect ratio (square) but it keeps enlarging the image causing it to be blurry. Why?

我也跟着這樣@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); 

這是我拍攝的,

enter image description here

它導致我下面,

enter image description here

現在我就在廣場上的照片,但要注意在輸出,還是我理解的黃色方框外的照片。我想要的是得到居住在黃色廣場的照片。拍攝的圖像仍然很大,{w = 2448,h = 3264}。請注意,紅色圓圈表示圖像的外部部分不應包含在輸出中,因爲該部分不在黃色方塊內。

這是怎麼回事?

回答

2

最後,我從here得到了我的工作解決方案。我不確定在這裏複製「該網站內容」會造成任何錯誤(?),儘管我並未在此粘貼該代碼。

0

它看起來像您在實施中收到的圖像是返回300×300像素的圖像作物。你在屏幕上的黃色方塊是300乘300點。點與像素不同。因此,如果您的照片寬度爲3264像素,然後將其裁剪爲300像素,則會返回約爲原尺寸1/10的圖像。

+0

你需要使用數學的力量。 square.size是screen.size,因爲______是picture.sizeInPixels。 –